Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 324065
b: refs/heads/master
c: 184b08a
h: refs/heads/master
i:
  324063: 98448bf
v: v3
  • Loading branch information
Sebastian Ott authored and Martin Schwidefsky committed Sep 26, 2012
1 parent 2613cb4 commit 7f5102b
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d2fc439b99820cccd6978918c260730dd97bf373
refs/heads/master: 184b08afb5eab8a43d75f4aa0a0f912653f797d7
35 changes: 35 additions & 0 deletions trunk/drivers/s390/cio/chsc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -1047,3 +1052,33 @@ int chsc_siosl(struct subchannel_id schid)
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);
35 changes: 35 additions & 0 deletions trunk/drivers/s390/cio/chsc.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 7f5102b

Please sign in to comment.