mirror of
https://github.com/torvalds/linux.git
synced 2024-11-01 01:31:44 +00:00
s390/chsc: implement store SCM information
chsc_scm_info will be used to detect all available increments of storage class memory. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
d2fc439b99
commit
184b08afb5
@ -52,6 +52,11 @@ int chsc_error_from_response(int response)
|
||||
return -EINVAL;
|
||||
case 0x0004:
|
||||
return -EOPNOTSUPP;
|
||||
case 0x000b:
|
||||
return -EBUSY;
|
||||
case 0x0100:
|
||||
case 0x0102:
|
||||
return -ENOMEM;
|
||||
default:
|
||||
return -EIO;
|
||||
}
|
||||
@ -1047,3 +1052,33 @@ out:
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(chsc_siosl);
|
||||
|
||||
/**
|
||||
* chsc_scm_info() - store SCM information (SSI)
|
||||
* @scm_area: request and response block for SSI
|
||||
* @token: continuation token
|
||||
*
|
||||
* Returns 0 on success.
|
||||
*/
|
||||
int chsc_scm_info(struct chsc_scm_info *scm_area, u64 token)
|
||||
{
|
||||
int ccode, ret;
|
||||
|
||||
memset(scm_area, 0, sizeof(*scm_area));
|
||||
scm_area->request.length = 0x0020;
|
||||
scm_area->request.code = 0x004C;
|
||||
scm_area->reqtok = token;
|
||||
|
||||
ccode = chsc(scm_area);
|
||||
if (ccode > 0) {
|
||||
ret = (ccode == 3) ? -ENODEV : -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
ret = chsc_error_from_response(scm_area->response.code);
|
||||
if (ret != 0)
|
||||
CIO_MSG_EVENT(2, "chsc: scm info failed (rc=%04x)\n",
|
||||
scm_area->response.code);
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(chsc_scm_info);
|
||||
|
@ -119,4 +119,39 @@ int chsc_error_from_response(int response);
|
||||
|
||||
int chsc_siosl(struct subchannel_id schid);
|
||||
|
||||
/* Functions and definitions to query storage-class memory. */
|
||||
struct sale {
|
||||
u64 sa;
|
||||
u32 p:4;
|
||||
u32 op_state:4;
|
||||
u32 data_state:4;
|
||||
u32 rank:4;
|
||||
u32 r:1;
|
||||
u32:7;
|
||||
u32 rid:8;
|
||||
u32:32;
|
||||
} __packed;
|
||||
|
||||
struct chsc_scm_info {
|
||||
struct chsc_header request;
|
||||
u32:32;
|
||||
u64 reqtok;
|
||||
u32 reserved1[4];
|
||||
struct chsc_header response;
|
||||
u64:56;
|
||||
u8 rq;
|
||||
u32 mbc;
|
||||
u64 msa;
|
||||
u16 is;
|
||||
u16 mmc;
|
||||
u32 mci;
|
||||
u64 nr_scm_ini;
|
||||
u64 nr_scm_unini;
|
||||
u32 reserved2[10];
|
||||
u64 restok;
|
||||
struct sale scmal[248];
|
||||
} __packed;
|
||||
|
||||
int chsc_scm_info(struct chsc_scm_info *scm_area, u64 token);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user