Skip to content

Commit c93b263

Browse files
htejunJeff Garzik
authored andcommitted
libata: clean up lpm related symbols and sysfs show/store functions
Link power management related symbols are in confusing state w/ mixed usages of lpm, ipm and pm. This patch cleans up lpm related symbols and sysfs show/store functions as follows. * lpm states - NOT_AVAILABLE, MIN_POWER, MAX_PERFORMANCE and MEDIUM_POWER are renamed to ATA_LPM_UNKNOWN and ATA_LPM_{MIN|MAX|MED}_POWER. * Pre/postfixes are unified to lpm. * sysfs show/store functions for link_power_management_policy were curiously named get/put and unnecessarily complex. Renamed to show/store and simplified. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
1 parent c43d559 commit c93b263

File tree

9 files changed

+79
-100
lines changed

9 files changed

+79
-100
lines changed

drivers/ata/ahci.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1209,7 +1209,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
12091209
0x100 + ap->port_no * 0x80, "port");
12101210

12111211
/* set initial link pm policy */
1212-
ap->pm_policy = NOT_AVAILABLE;
1212+
ap->lpm_policy = ATA_LPM_UNKNOWN;
12131213

12141214
/* set enclosure management message type */
12151215
if (ap->flags & ATA_FLAG_EM)

drivers/ata/ahci.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ enum {
216216
AHCI_FLAG_COMMON = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
217217
ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
218218
ATA_FLAG_ACPI_SATA | ATA_FLAG_AN |
219-
ATA_FLAG_IPM,
219+
ATA_FLAG_LPM,
220220

221221
ICH_MAP = 0x90, /* ICH MAP register */
222222

drivers/ata/ahci_platform.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ static int __init ahci_probe(struct platform_device *pdev)
130130
ata_port_desc(ap, "port 0x%x", 0x100 + ap->port_no * 0x80);
131131

132132
/* set initial link pm policy */
133-
ap->pm_policy = NOT_AVAILABLE;
133+
ap->lpm_policy = ATA_LPM_UNKNOWN;
134134

135135
/* set enclosure management message type */
136136
if (ap->flags & ATA_FLAG_EM)

drivers/ata/libahci.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)
5656
module_param_named(ignore_sss, ahci_ignore_sss, int, 0444);
5757
MODULE_PARM_DESC(ignore_sss, "Ignore staggered spinup flag (0=don't ignore, 1=ignore)");
5858

59-
static int ahci_enable_alpm(struct ata_port *ap,
60-
enum link_pm policy);
59+
static int ahci_enable_alpm(struct ata_port *ap, enum ata_lpm_policy policy);
6160
static void ahci_disable_alpm(struct ata_port *ap);
6261
static ssize_t ahci_led_show(struct ata_port *ap, char *buf);
6362
static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
@@ -649,7 +648,7 @@ static void ahci_disable_alpm(struct ata_port *ap)
649648
u32 cmd;
650649
struct ahci_port_priv *pp = ap->private_data;
651650

652-
/* IPM bits should be disabled by libata-core */
651+
/* LPM bits should be disabled by libata-core */
653652
/* get the existing command bits */
654653
cmd = readl(port_mmio + PORT_CMD);
655654

@@ -691,8 +690,7 @@ static void ahci_disable_alpm(struct ata_port *ap)
691690
*/
692691
}
693692

694-
static int ahci_enable_alpm(struct ata_port *ap,
695-
enum link_pm policy)
693+
static int ahci_enable_alpm(struct ata_port *ap, enum ata_lpm_policy policy)
696694
{
697695
struct ahci_host_priv *hpriv = ap->host->private_data;
698696
void __iomem *port_mmio = ahci_port_base(ap);
@@ -705,21 +703,21 @@ static int ahci_enable_alpm(struct ata_port *ap,
705703
return -EINVAL;
706704

707705
switch (policy) {
708-
case MAX_PERFORMANCE:
709-
case NOT_AVAILABLE:
706+
case ATA_LPM_MAX_POWER:
707+
case ATA_LPM_UNKNOWN:
710708
/*
711-
* if we came here with NOT_AVAILABLE,
709+
* if we came here with ATA_LPM_UNKNOWN,
712710
* it just means this is the first time we
713711
* have tried to enable - default to max performance,
714712
* and let the user go to lower power modes on request.
715713
*/
716714
ahci_disable_alpm(ap);
717715
return 0;
718-
case MIN_POWER:
716+
case ATA_LPM_MIN_POWER:
719717
/* configure HBA to enter SLUMBER */
720718
asp = PORT_CMD_ASP;
721719
break;
722-
case MEDIUM_POWER:
720+
case ATA_LPM_MED_POWER:
723721
/* configure HBA to enter PARTIAL */
724722
asp = 0;
725723
break;
@@ -762,7 +760,7 @@ static int ahci_enable_alpm(struct ata_port *ap,
762760
writel(cmd, port_mmio + PORT_CMD);
763761
cmd = readl(port_mmio + PORT_CMD);
764762

765-
/* IPM bits should be set by libata-core */
763+
/* LPM bits should be set by libata-core */
766764
return 0;
767765
}
768766

drivers/ata/libata-core.c

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,7 @@ const char *sata_spd_string(unsigned int spd)
10301030
return spd_str[spd - 1];
10311031
}
10321032

1033-
static int ata_dev_set_dipm(struct ata_device *dev, enum link_pm policy)
1033+
static int ata_dev_set_dipm(struct ata_device *dev, enum ata_lpm_policy policy)
10341034
{
10351035
struct ata_link *link = dev->link;
10361036
struct ata_port *ap = link->ap;
@@ -1040,14 +1040,14 @@ static int ata_dev_set_dipm(struct ata_device *dev, enum link_pm policy)
10401040

10411041
/*
10421042
* disallow DIPM for drivers which haven't set
1043-
* ATA_FLAG_IPM. This is because when DIPM is enabled,
1043+
* ATA_FLAG_LPM. This is because when DIPM is enabled,
10441044
* phy ready will be set in the interrupt status on
10451045
* state changes, which will cause some drivers to
10461046
* think there are errors - additionally drivers will
10471047
* need to disable hot plug.
10481048
*/
1049-
if (!(ap->flags & ATA_FLAG_IPM) || !ata_dev_enabled(dev)) {
1050-
ap->pm_policy = NOT_AVAILABLE;
1049+
if (!(ap->flags & ATA_FLAG_LPM) || !ata_dev_enabled(dev)) {
1050+
ap->lpm_policy = ATA_LPM_UNKNOWN;
10511051
return -EINVAL;
10521052
}
10531053

@@ -1066,8 +1066,8 @@ static int ata_dev_set_dipm(struct ata_device *dev, enum link_pm policy)
10661066
return rc;
10671067

10681068
switch (policy) {
1069-
case MIN_POWER:
1070-
/* no restrictions on IPM transitions */
1069+
case ATA_LPM_MIN_POWER:
1070+
/* no restrictions on LPM transitions */
10711071
scontrol &= ~(0x3 << 8);
10721072
rc = sata_scr_write(link, SCR_CONTROL, scontrol);
10731073
if (rc)
@@ -1078,30 +1078,30 @@ static int ata_dev_set_dipm(struct ata_device *dev, enum link_pm policy)
10781078
err_mask = ata_dev_set_feature(dev,
10791079
SETFEATURES_SATA_ENABLE, SATA_DIPM);
10801080
break;
1081-
case MEDIUM_POWER:
1082-
/* allow IPM to PARTIAL */
1081+
case ATA_LPM_MED_POWER:
1082+
/* allow LPM to PARTIAL */
10831083
scontrol &= ~(0x1 << 8);
10841084
scontrol |= (0x2 << 8);
10851085
rc = sata_scr_write(link, SCR_CONTROL, scontrol);
10861086
if (rc)
10871087
return rc;
10881088

10891089
/*
1090-
* we don't have to disable DIPM since IPM flags
1090+
* we don't have to disable DIPM since LPM flags
10911091
* disallow transitions to SLUMBER, which effectively
10921092
* disable DIPM if it does not support PARTIAL
10931093
*/
10941094
break;
1095-
case NOT_AVAILABLE:
1096-
case MAX_PERFORMANCE:
1097-
/* disable all IPM transitions */
1095+
case ATA_LPM_UNKNOWN:
1096+
case ATA_LPM_MAX_POWER:
1097+
/* disable all LPM transitions */
10981098
scontrol |= (0x3 << 8);
10991099
rc = sata_scr_write(link, SCR_CONTROL, scontrol);
11001100
if (rc)
11011101
return rc;
11021102

11031103
/*
1104-
* we don't have to disable DIPM since IPM flags
1104+
* we don't have to disable DIPM since LPM flags
11051105
* disallow all transitions which effectively
11061106
* disable DIPM anyway.
11071107
*/
@@ -1125,9 +1125,9 @@ static int ata_dev_set_dipm(struct ata_device *dev, enum link_pm policy)
11251125
* enabling Host Initiated Power management.
11261126
*
11271127
* Locking: Caller.
1128-
* Returns: -EINVAL if IPM is not supported, 0 otherwise.
1128+
* Returns: -EINVAL if LPM is not supported, 0 otherwise.
11291129
*/
1130-
void ata_dev_enable_pm(struct ata_device *dev, enum link_pm policy)
1130+
void ata_dev_enable_pm(struct ata_device *dev, enum ata_lpm_policy policy)
11311131
{
11321132
int rc = 0;
11331133
struct ata_port *ap = dev->link->ap;
@@ -1141,9 +1141,9 @@ void ata_dev_enable_pm(struct ata_device *dev, enum link_pm policy)
11411141

11421142
enable_pm_out:
11431143
if (rc)
1144-
ap->pm_policy = MAX_PERFORMANCE;
1144+
ap->lpm_policy = ATA_LPM_MAX_POWER;
11451145
else
1146-
ap->pm_policy = policy;
1146+
ap->lpm_policy = policy;
11471147
return /* rc */; /* hopefully we can use 'rc' eventually */
11481148
}
11491149

@@ -1164,15 +1164,15 @@ static void ata_dev_disable_pm(struct ata_device *dev)
11641164
{
11651165
struct ata_port *ap = dev->link->ap;
11661166

1167-
ata_dev_set_dipm(dev, MAX_PERFORMANCE);
1167+
ata_dev_set_dipm(dev, ATA_LPM_MAX_POWER);
11681168
if (ap->ops->disable_pm)
11691169
ap->ops->disable_pm(ap);
11701170
}
11711171
#endif /* CONFIG_PM */
11721172

1173-
void ata_lpm_schedule(struct ata_port *ap, enum link_pm policy)
1173+
void ata_lpm_schedule(struct ata_port *ap, enum ata_lpm_policy policy)
11741174
{
1175-
ap->pm_policy = policy;
1175+
ap->lpm_policy = policy;
11761176
ap->link.eh_info.action |= ATA_EH_LPM;
11771177
ap->link.eh_info.flags |= ATA_EHI_NO_AUTOPSY;
11781178
ata_port_schedule_eh(ap);
@@ -1201,7 +1201,7 @@ static void ata_lpm_disable(struct ata_host *host)
12011201

12021202
for (i = 0; i < host->n_ports; i++) {
12031203
struct ata_port *ap = host->ports[i];
1204-
ata_lpm_schedule(ap, ap->pm_policy);
1204+
ata_lpm_schedule(ap, ap->lpm_policy);
12051205
}
12061206
}
12071207
#endif /* CONFIG_PM */
@@ -2564,7 +2564,7 @@ int ata_dev_configure(struct ata_device *dev)
25642564
if (dev->flags & ATA_DFLAG_LBA48)
25652565
dev->max_sectors = ATA_MAX_SECTORS_LBA48;
25662566

2567-
if (!(dev->horkage & ATA_HORKAGE_IPM)) {
2567+
if (!(dev->horkage & ATA_HORKAGE_LPM)) {
25682568
if (ata_id_has_hipm(dev->id))
25692569
dev->flags |= ATA_DFLAG_HIPM;
25702570
if (ata_id_has_dipm(dev->id))
@@ -2591,11 +2591,11 @@ int ata_dev_configure(struct ata_device *dev)
25912591
dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128,
25922592
dev->max_sectors);
25932593

2594-
if (ata_dev_blacklisted(dev) & ATA_HORKAGE_IPM) {
2595-
dev->horkage |= ATA_HORKAGE_IPM;
2594+
if (ata_dev_blacklisted(dev) & ATA_HORKAGE_LPM) {
2595+
dev->horkage |= ATA_HORKAGE_LPM;
25962596

25972597
/* reset link pm_policy for this port to no pm */
2598-
ap->pm_policy = MAX_PERFORMANCE;
2598+
ap->lpm_policy = ATA_LPM_MAX_POWER;
25992599
}
26002600

26012601
if (ap->ops->dev_config)

drivers/ata/libata-eh.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3570,7 +3570,7 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
35703570
/* configure link power saving */
35713571
if (ehc->i.action & ATA_EH_LPM)
35723572
ata_for_each_dev(dev, link, ALL)
3573-
ata_dev_enable_pm(dev, ap->pm_policy);
3573+
ata_dev_enable_pm(dev, ap->lpm_policy);
35743574

35753575
/* this link is okay now */
35763576
ehc->i.flags = 0;

drivers/ata/libata-scsi.c

Lines changed: 22 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -103,72 +103,50 @@ static const u8 def_control_mpage[CONTROL_MPAGE_LEN] = {
103103
0, 30 /* extended self test time, see 05-359r1 */
104104
};
105105

106-
static const struct {
107-
enum link_pm value;
108-
const char *name;
109-
} link_pm_policy[] = {
110-
{ NOT_AVAILABLE, "max_performance" },
111-
{ MIN_POWER, "min_power" },
112-
{ MAX_PERFORMANCE, "max_performance" },
113-
{ MEDIUM_POWER, "medium_power" },
106+
static const char *ata_lpm_policy_names[] = {
107+
[ATA_LPM_UNKNOWN] = "max_performance",
108+
[ATA_LPM_MAX_POWER] = "max_performance",
109+
[ATA_LPM_MED_POWER] = "medium_power",
110+
[ATA_LPM_MIN_POWER] = "min_power",
114111
};
115112

116-
static const char *ata_scsi_lpm_get(enum link_pm policy)
117-
{
118-
int i;
119-
120-
for (i = 0; i < ARRAY_SIZE(link_pm_policy); i++)
121-
if (link_pm_policy[i].value == policy)
122-
return link_pm_policy[i].name;
123-
124-
return NULL;
125-
}
126-
127-
static ssize_t ata_scsi_lpm_put(struct device *dev,
128-
struct device_attribute *attr,
129-
const char *buf, size_t count)
113+
static ssize_t ata_scsi_lpm_store(struct device *dev,
114+
struct device_attribute *attr,
115+
const char *buf, size_t count)
130116
{
131117
struct Scsi_Host *shost = class_to_shost(dev);
132118
struct ata_port *ap = ata_shost_to_port(shost);
133-
enum link_pm policy = 0;
134-
int i;
119+
enum ata_lpm_policy policy;
135120

136-
/*
137-
* we are skipping array location 0 on purpose - this
138-
* is because a value of NOT_AVAILABLE is displayed
139-
* to the user as max_performance, but when the user
140-
* writes "max_performance", they actually want the
141-
* value to match MAX_PERFORMANCE.
142-
*/
143-
for (i = 1; i < ARRAY_SIZE(link_pm_policy); i++) {
144-
const int len = strlen(link_pm_policy[i].name);
145-
if (strncmp(link_pm_policy[i].name, buf, len) == 0) {
146-
policy = link_pm_policy[i].value;
121+
/* UNKNOWN is internal state, iterate from MAX_POWER */
122+
for (policy = ATA_LPM_MAX_POWER;
123+
policy < ARRAY_SIZE(ata_lpm_policy_names); policy++) {
124+
const char *name = ata_lpm_policy_names[policy];
125+
126+
if (strncmp(name, buf, strlen(name)) == 0)
147127
break;
148-
}
149128
}
150-
if (!policy)
129+
if (policy == ARRAY_SIZE(ata_lpm_policy_names))
151130
return -EINVAL;
152131

153132
ata_lpm_schedule(ap, policy);
154133
return count;
155134
}
156135

157-
static ssize_t
158-
ata_scsi_lpm_show(struct device *dev, struct device_attribute *attr, char *buf)
136+
static ssize_t ata_scsi_lpm_show(struct device *dev,
137+
struct device_attribute *attr, char *buf)
159138
{
160139
struct Scsi_Host *shost = class_to_shost(dev);
161140
struct ata_port *ap = ata_shost_to_port(shost);
162-
const char *policy =
163-
ata_scsi_lpm_get(ap->pm_policy);
164141

165-
if (!policy)
142+
if (ap->lpm_policy >= ARRAY_SIZE(ata_lpm_policy_names))
166143
return -EINVAL;
167144

168-
return snprintf(buf, 23, "%s\n", policy);
145+
return snprintf(buf, PAGE_SIZE, "%s\n",
146+
ata_lpm_policy_names[ap->lpm_policy]);
169147
}
170148
DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR,
171-
ata_scsi_lpm_show, ata_scsi_lpm_put);
149+
ata_scsi_lpm_show, ata_scsi_lpm_store);
172150
EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy);
173151

174152
static ssize_t ata_scsi_park_show(struct device *device,

drivers/ata/libata.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,10 @@ extern int sata_link_init_spd(struct ata_link *link);
100100
extern int ata_task_ioctl(struct scsi_device *scsidev, void __user *arg);
101101
extern int ata_cmd_ioctl(struct scsi_device *scsidev, void __user *arg);
102102
extern struct ata_port *ata_port_alloc(struct ata_host *host);
103-
extern void ata_dev_enable_pm(struct ata_device *dev, enum link_pm policy);
104-
extern void ata_lpm_schedule(struct ata_port *ap, enum link_pm);
103+
extern void ata_dev_enable_pm(struct ata_device *dev,
104+
enum ata_lpm_policy policy);
105+
extern void ata_lpm_schedule(struct ata_port *ap,
106+
enum ata_lpm_policy policy);
105107
extern const char *sata_spd_string(unsigned int spd);
106108

107109
/* libata-acpi.c */

0 commit comments

Comments
 (0)