s390/cio: add helper to query utility strings per given ccw device
Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
Родитель
1c21765cb3
Коммит
199652309a
|
@ -231,4 +231,5 @@ int ccw_device_siosl(struct ccw_device *);
|
|||
extern void ccw_device_get_schid(struct ccw_device *, struct subchannel_id *);
|
||||
|
||||
struct channel_path_desc_fmt0 *ccw_device_get_chp_desc(struct ccw_device *, int);
|
||||
u8 *ccw_device_get_util_str(struct ccw_device *cdev, int chp_idx);
|
||||
#endif /* _S390_CCWDEV_H_ */
|
||||
|
|
|
@ -472,6 +472,36 @@ struct channel_path_desc_fmt0 *ccw_device_get_chp_desc(struct ccw_device *cdev,
|
|||
return chp_get_chp_desc(chpid);
|
||||
}
|
||||
|
||||
/**
|
||||
* ccw_device_get_util_str() - return newly allocated utility strings
|
||||
* @cdev: device to obtain the utility strings for
|
||||
* @chp_idx: index of the channel path
|
||||
*
|
||||
* On success return a newly allocated copy of the utility strings
|
||||
* associated with the given channel path. Return %NULL on error.
|
||||
*/
|
||||
u8 *ccw_device_get_util_str(struct ccw_device *cdev, int chp_idx)
|
||||
{
|
||||
struct subchannel *sch = to_subchannel(cdev->dev.parent);
|
||||
struct channel_path *chp;
|
||||
struct chp_id chpid;
|
||||
u8 *util_str;
|
||||
|
||||
chp_id_init(&chpid);
|
||||
chpid.id = sch->schib.pmcw.chpid[chp_idx];
|
||||
chp = chpid_to_chp(chpid);
|
||||
|
||||
util_str = kmalloc(sizeof(chp->desc_fmt3.util_str), GFP_KERNEL);
|
||||
if (!util_str)
|
||||
return NULL;
|
||||
|
||||
mutex_lock(&chp->lock);
|
||||
memcpy(util_str, chp->desc_fmt3.util_str, sizeof(chp->desc_fmt3.util_str));
|
||||
mutex_unlock(&chp->lock);
|
||||
|
||||
return util_str;
|
||||
}
|
||||
|
||||
/**
|
||||
* ccw_device_get_id() - obtain a ccw device id
|
||||
* @cdev: device to obtain the id for
|
||||
|
@ -682,3 +712,4 @@ EXPORT_SYMBOL(ccw_device_start_key);
|
|||
EXPORT_SYMBOL(ccw_device_get_ciw);
|
||||
EXPORT_SYMBOL(ccw_device_get_path_mask);
|
||||
EXPORT_SYMBOL_GPL(ccw_device_get_chp_desc);
|
||||
EXPORT_SYMBOL_GPL(ccw_device_get_util_str);
|
||||
|
|
Загрузка…
Ссылка в новой задаче