mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04:00
SCSI misc on 20150209
This is the usual grab bag of driver updates (hpsa, storvsc, mp2sas, megaraid_sas, ses) plus an assortment of minor updates. There's also an update to ufs which adds new phy drivers and finally a new logging infrastructure for SCSI. Signed-off-by: James Bottomley <[email protected]> -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQEcBAABAgAGBQJU2Ty5AAoJEDeqqVYsXL0M9rAH/1xNpAxXuxQq+dW5Z+uOaX60 5RRIu7/xA1HEfzkT5FTHrolmogDjVqawu4PZS66iHDeo05RBVUlbTA8qCK+MlRcN U6s0cLEw59eH3EaCfOGuYp/MnbhuV0eNxe0btmqJIQwuW3+gwZKGJdOq6LS2YasJ k/DyIBVmkJAVsN56vm9q2vbtcZp+Bg+ngqBS+SC4TF7vV1WCtFmS6yaUf62PYW3D +Irx37qHZntDR5wdw3dsuKDi5U8bl6myPjaVLnVJqg/WIF9RlCkjk5xpWT99AmVO NmtYQxLLBlAQ5K+sIlBUwxZe+8q1l+Aj4TTmJHAfFtyfp25s7JR9I6/QtOyC5Kw= =odol -----END PGP SIGNATURE----- Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi Pull first round of SCSI updates from James Bottomley: "This is the usual grab bag of driver updates (hpsa, storvsc, mp2sas, megaraid_sas, ses) plus an assortment of minor updates. There's also an update to ufs which adds new phy drivers and finally a new logging infrastructure for SCSI" * tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: (114 commits) scsi_logging: return void for dev_printk() functions scsi: print single-character strings with seq_putc scsi: merge consecutive seq_puts calls scsi: replace seq_printf with seq_puts aha152x: replace seq_printf with seq_puts advansys: replace seq_printf with seq_puts scsi: remove SPRINTF macro sg: remove an unused variable hpsa: Use local workqueues instead of system workqueues hpsa: add in P840ar controller model name hpsa: add in gen9 controller model names hpsa: detect and report failures changing controller transport modes hpsa: shorten the wait for the CISS doorbell mode change ack hpsa: refactor duplicated scan completion code into a new routine hpsa: move SG descriptor set-up out of hpsa_scatter_gather() hpsa: do not use function pointers in fast path command submission hpsa: print CDBs instead of kernel virtual addresses for uncommon errors hpsa: do not use a void pointer for scsi_cmd field of struct CommandList hpsa: return failed from device reset/abort handlers hpsa: check for ctlr lockup after command allocation in main io path ...
This commit is contained in:
commit
540a7c5061
92 changed files with 6325 additions and 2265 deletions
|
|
@ -145,8 +145,11 @@ enclosure_register(struct device *dev, const char *name, int components,
|
|||
if (err)
|
||||
goto err;
|
||||
|
||||
for (i = 0; i < components; i++)
|
||||
for (i = 0; i < components; i++) {
|
||||
edev->component[i].number = -1;
|
||||
edev->component[i].slot = -1;
|
||||
edev->component[i].power_status = 1;
|
||||
}
|
||||
|
||||
mutex_lock(&container_list_lock);
|
||||
list_add_tail(&edev->node, &container_list);
|
||||
|
|
@ -273,27 +276,26 @@ enclosure_component_find_by_name(struct enclosure_device *edev,
|
|||
static const struct attribute_group *enclosure_component_groups[];
|
||||
|
||||
/**
|
||||
* enclosure_component_register - add a particular component to an enclosure
|
||||
* enclosure_component_alloc - prepare a new enclosure component
|
||||
* @edev: the enclosure to add the component
|
||||
* @num: the device number
|
||||
* @type: the type of component being added
|
||||
* @name: an optional name to appear in sysfs (leave NULL if none)
|
||||
*
|
||||
* Registers the component. The name is optional for enclosures that
|
||||
* give their components a unique name. If not, leave the field NULL
|
||||
* and a name will be assigned.
|
||||
* The name is optional for enclosures that give their components a unique
|
||||
* name. If not, leave the field NULL and a name will be assigned.
|
||||
*
|
||||
* Returns a pointer to the enclosure component or an error.
|
||||
*/
|
||||
struct enclosure_component *
|
||||
enclosure_component_register(struct enclosure_device *edev,
|
||||
unsigned int number,
|
||||
enum enclosure_component_type type,
|
||||
const char *name)
|
||||
enclosure_component_alloc(struct enclosure_device *edev,
|
||||
unsigned int number,
|
||||
enum enclosure_component_type type,
|
||||
const char *name)
|
||||
{
|
||||
struct enclosure_component *ecomp;
|
||||
struct device *cdev;
|
||||
int err, i;
|
||||
int i;
|
||||
char newname[COMPONENT_NAME_SIZE];
|
||||
|
||||
if (number >= edev->components)
|
||||
|
|
@ -327,14 +329,30 @@ enclosure_component_register(struct enclosure_device *edev,
|
|||
cdev->release = enclosure_component_release;
|
||||
cdev->groups = enclosure_component_groups;
|
||||
|
||||
return ecomp;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(enclosure_component_alloc);
|
||||
|
||||
/**
|
||||
* enclosure_component_register - publishes an initialized enclosure component
|
||||
* @ecomp: component to add
|
||||
*
|
||||
* Returns 0 on successful registration, releases the component otherwise
|
||||
*/
|
||||
int enclosure_component_register(struct enclosure_component *ecomp)
|
||||
{
|
||||
struct device *cdev;
|
||||
int err;
|
||||
|
||||
cdev = &ecomp->cdev;
|
||||
err = device_register(cdev);
|
||||
if (err) {
|
||||
ecomp->number = -1;
|
||||
put_device(cdev);
|
||||
return ERR_PTR(err);
|
||||
return err;
|
||||
}
|
||||
|
||||
return ecomp;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(enclosure_component_register);
|
||||
|
||||
|
|
@ -417,8 +435,21 @@ static ssize_t components_show(struct device *cdev,
|
|||
}
|
||||
static DEVICE_ATTR_RO(components);
|
||||
|
||||
static ssize_t id_show(struct device *cdev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct enclosure_device *edev = to_enclosure_device(cdev);
|
||||
|
||||
if (edev->cb->show_id)
|
||||
return edev->cb->show_id(edev, buf);
|
||||
return -EINVAL;
|
||||
}
|
||||
static DEVICE_ATTR_RO(id);
|
||||
|
||||
static struct attribute *enclosure_class_attrs[] = {
|
||||
&dev_attr_components.attr,
|
||||
&dev_attr_id.attr,
|
||||
NULL,
|
||||
};
|
||||
ATTRIBUTE_GROUPS(enclosure_class);
|
||||
|
|
@ -553,6 +584,40 @@ static ssize_t set_component_locate(struct device *cdev,
|
|||
return count;
|
||||
}
|
||||
|
||||
static ssize_t get_component_power_status(struct device *cdev,
|
||||
struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct enclosure_device *edev = to_enclosure_device(cdev->parent);
|
||||
struct enclosure_component *ecomp = to_enclosure_component(cdev);
|
||||
|
||||
if (edev->cb->get_power_status)
|
||||
edev->cb->get_power_status(edev, ecomp);
|
||||
return snprintf(buf, 40, "%s\n", ecomp->power_status ? "on" : "off");
|
||||
}
|
||||
|
||||
static ssize_t set_component_power_status(struct device *cdev,
|
||||
struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct enclosure_device *edev = to_enclosure_device(cdev->parent);
|
||||
struct enclosure_component *ecomp = to_enclosure_component(cdev);
|
||||
int val;
|
||||
|
||||
if (strncmp(buf, "on", 2) == 0 &&
|
||||
(buf[2] == '\n' || buf[2] == '\0'))
|
||||
val = 1;
|
||||
else if (strncmp(buf, "off", 3) == 0 &&
|
||||
(buf[3] == '\n' || buf[3] == '\0'))
|
||||
val = 0;
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
if (edev->cb->set_power_status)
|
||||
edev->cb->set_power_status(edev, ecomp, val);
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t get_component_type(struct device *cdev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
|
|
@ -561,6 +626,20 @@ static ssize_t get_component_type(struct device *cdev,
|
|||
return snprintf(buf, 40, "%s\n", enclosure_type[ecomp->type]);
|
||||
}
|
||||
|
||||
static ssize_t get_component_slot(struct device *cdev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct enclosure_component *ecomp = to_enclosure_component(cdev);
|
||||
int slot;
|
||||
|
||||
/* if the enclosure does not override then use 'number' as a stand-in */
|
||||
if (ecomp->slot >= 0)
|
||||
slot = ecomp->slot;
|
||||
else
|
||||
slot = ecomp->number;
|
||||
|
||||
return snprintf(buf, 40, "%d\n", slot);
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(fault, S_IRUGO | S_IWUSR, get_component_fault,
|
||||
set_component_fault);
|
||||
|
|
@ -570,14 +649,19 @@ static DEVICE_ATTR(active, S_IRUGO | S_IWUSR, get_component_active,
|
|||
set_component_active);
|
||||
static DEVICE_ATTR(locate, S_IRUGO | S_IWUSR, get_component_locate,
|
||||
set_component_locate);
|
||||
static DEVICE_ATTR(power_status, S_IRUGO | S_IWUSR, get_component_power_status,
|
||||
set_component_power_status);
|
||||
static DEVICE_ATTR(type, S_IRUGO, get_component_type, NULL);
|
||||
static DEVICE_ATTR(slot, S_IRUGO, get_component_slot, NULL);
|
||||
|
||||
static struct attribute *enclosure_component_attrs[] = {
|
||||
&dev_attr_fault.attr,
|
||||
&dev_attr_status.attr,
|
||||
&dev_attr_active.attr,
|
||||
&dev_attr_locate.attr,
|
||||
&dev_attr_power_status.attr,
|
||||
&dev_attr_type.attr,
|
||||
&dev_attr_slot.attr,
|
||||
NULL
|
||||
};
|
||||
ATTRIBUTE_GROUPS(enclosure_component);
|
||||
|
|
|
|||
Loading…
Reference in a new issue