libata-scsi.c (4dbfa39b6c95eb9d0aedb5bd00bb552b91c31e3d) | libata-scsi.c (ca77329fb713b7fea6a307068e0dd0248e7aa640) |
---|---|
1/* 2 * libata-scsi.c - helper library for ATA 3 * 4 * Maintained by: Jeff Garzik <jgarzik@pobox.com> 5 * Please ALWAYS copy linux-ide@vger.kernel.org 6 * on emails. 7 * 8 * Copyright 2003-2004 Red Hat, Inc. All rights reserved. --- 96 unchanged lines hidden (view full) --- 105 */ 106static struct scsi_transport_template ata_scsi_transport_template = { 107 .eh_strategy_handler = ata_scsi_error, 108 .eh_timed_out = ata_scsi_timed_out, 109 .user_scan = ata_scsi_user_scan, 110}; 111 112 | 1/* 2 * libata-scsi.c - helper library for ATA 3 * 4 * Maintained by: Jeff Garzik <jgarzik@pobox.com> 5 * Please ALWAYS copy linux-ide@vger.kernel.org 6 * on emails. 7 * 8 * Copyright 2003-2004 Red Hat, Inc. All rights reserved. --- 96 unchanged lines hidden (view full) --- 105 */ 106static struct scsi_transport_template ata_scsi_transport_template = { 107 .eh_strategy_handler = ata_scsi_error, 108 .eh_timed_out = ata_scsi_timed_out, 109 .user_scan = ata_scsi_user_scan, 110}; 111 112 |
113static const struct { 114 enum link_pm value; 115 const char *name; 116} link_pm_policy[] = { 117 { NOT_AVAILABLE, "max_performance" }, 118 { MIN_POWER, "min_power" }, 119 { MAX_PERFORMANCE, "max_performance" }, 120 { MEDIUM_POWER, "medium_power" }, 121}; 122 123const char *ata_scsi_lpm_get(enum link_pm policy) 124{ 125 int i; 126 127 for (i = 0; i < ARRAY_SIZE(link_pm_policy); i++) 128 if (link_pm_policy[i].value == policy) 129 return link_pm_policy[i].name; 130 131 return NULL; 132} 133 134static ssize_t ata_scsi_lpm_put(struct class_device *class_dev, 135 const char *buf, size_t count) 136{ 137 struct Scsi_Host *shost = class_to_shost(class_dev); 138 struct ata_port *ap = ata_shost_to_port(shost); 139 enum link_pm policy = 0; 140 int i; 141 142 /* 143 * we are skipping array location 0 on purpose - this 144 * is because a value of NOT_AVAILABLE is displayed 145 * to the user as max_performance, but when the user 146 * writes "max_performance", they actually want the 147 * value to match MAX_PERFORMANCE. 148 */ 149 for (i = 1; i < ARRAY_SIZE(link_pm_policy); i++) { 150 const int len = strlen(link_pm_policy[i].name); 151 if (strncmp(link_pm_policy[i].name, buf, len) == 0 && 152 buf[len] == '\n') { 153 policy = link_pm_policy[i].value; 154 break; 155 } 156 } 157 if (!policy) 158 return -EINVAL; 159 160 ata_lpm_schedule(ap, policy); 161 return count; 162} 163 164static ssize_t 165ata_scsi_lpm_show(struct class_device *class_dev, char *buf) 166{ 167 struct Scsi_Host *shost = class_to_shost(class_dev); 168 struct ata_port *ap = ata_shost_to_port(shost); 169 const char *policy = 170 ata_scsi_lpm_get(ap->pm_policy); 171 172 if (!policy) 173 return -EINVAL; 174 175 return snprintf(buf, 23, "%s\n", policy); 176} 177CLASS_DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR, 178 ata_scsi_lpm_show, ata_scsi_lpm_put); 179EXPORT_SYMBOL_GPL(class_device_attr_link_power_management_policy); 180 |
|
113static void ata_scsi_invalid_field(struct scsi_cmnd *cmd, 114 void (*done)(struct scsi_cmnd *)) 115{ 116 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x24, 0x0); 117 /* "Invalid field in cbd" */ 118 done(cmd); 119} 120 --- 3419 unchanged lines hidden --- | 181static void ata_scsi_invalid_field(struct scsi_cmnd *cmd, 182 void (*done)(struct scsi_cmnd *)) 183{ 184 ata_scsi_set_sense(cmd, ILLEGAL_REQUEST, 0x24, 0x0); 185 /* "Invalid field in cbd" */ 186 done(cmd); 187} 188 --- 3419 unchanged lines hidden --- |