mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 21:59:12 -04:00
haven: rm: Clean VM Services - Console APIs
Standard replies are handled by hh_rm_call() and not by client driver. Thus, clean console APIs to handle hh_rm_call() response accordingly. Change-Id: I9bc49f15e33260a5fe539b141e311fa071e49211 Signed-off-by: Elliot Berman <eberman@codeaurora.org>
This commit is contained in:
parent
51047f5ec8
commit
aff0badb4f
2 changed files with 73 additions and 71 deletions
|
|
@ -118,10 +118,6 @@ struct hh_vm_console_common_req_payload {
|
|||
u32 reserved0;
|
||||
} __packed;
|
||||
|
||||
struct hh_vm_console_common_resp_payload {
|
||||
u32 response;
|
||||
} __packed;
|
||||
|
||||
/* Call: CONSOLE_WRITE */
|
||||
struct hh_vm_console_write_req_payload {
|
||||
u32 vmid;
|
||||
|
|
@ -129,10 +125,6 @@ struct hh_vm_console_write_req_payload {
|
|||
u8 data[0];
|
||||
} __packed;
|
||||
|
||||
struct hh_vm_console_write_resp_payload {
|
||||
u32 response;
|
||||
} __packed;
|
||||
|
||||
/* Message ID headers */
|
||||
/* Call: VM_GET_HYP_RESOURCES */
|
||||
#define HH_RM_RES_TYPE_DB_TX 0
|
||||
|
|
|
|||
|
|
@ -426,33 +426,35 @@ EXPORT_SYMBOL(hh_rm_vm_start);
|
|||
*/
|
||||
int hh_rm_console_open(hh_vmid_t vmid)
|
||||
{
|
||||
struct hh_vm_console_common_resp_payload *resp_payload;
|
||||
void *resp;
|
||||
struct hh_vm_console_common_req_payload req_payload = {0};
|
||||
size_t resp_payload_size;
|
||||
int err = 0, reply_err_code = 0;
|
||||
int reply_err_code = 0;
|
||||
|
||||
req_payload.vmid = vmid;
|
||||
|
||||
resp_payload = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_OPEN,
|
||||
&req_payload, sizeof(req_payload),
|
||||
&resp_payload_size, &reply_err_code);
|
||||
if (reply_err_code || IS_ERR_OR_NULL(resp_payload)) {
|
||||
err = PTR_ERR(resp_payload);
|
||||
pr_err("%s: CONSOLE_OPEN failed with err: %d\n",
|
||||
__func__, err);
|
||||
goto out;
|
||||
resp = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_OPEN,
|
||||
&req_payload, sizeof(req_payload),
|
||||
&resp_payload_size, &reply_err_code);
|
||||
if (IS_ERR(resp)) {
|
||||
pr_err("%s: Unable to send CONSOLE_OPEN to RM: %d\n", __func__,
|
||||
PTR_ERR(resp));
|
||||
return PTR_ERR(resp);
|
||||
}
|
||||
|
||||
if (resp_payload_size != sizeof(*resp_payload)) {
|
||||
if (reply_err_code) {
|
||||
pr_err("%s: CONSOLE_OPEN returned error: %d\n", __func__,
|
||||
reply_err_code);
|
||||
return reply_err_code;
|
||||
}
|
||||
|
||||
if (resp_payload_size) {
|
||||
pr_err("%s: Invalid size received for CONSOLE_OPEN: %u\n",
|
||||
__func__, resp_payload_size);
|
||||
err = -EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = err ? : resp_payload->response;
|
||||
kfree(resp_payload);
|
||||
out:
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(hh_rm_console_open);
|
||||
|
||||
|
|
@ -462,33 +464,35 @@ EXPORT_SYMBOL(hh_rm_console_open);
|
|||
*/
|
||||
int hh_rm_console_close(hh_vmid_t vmid)
|
||||
{
|
||||
struct hh_vm_console_common_resp_payload *resp_payload;
|
||||
void *resp;
|
||||
struct hh_vm_console_common_req_payload req_payload = {0};
|
||||
size_t resp_payload_size;
|
||||
int err = 0, reply_err_code = 0;
|
||||
int reply_err_code = 0;
|
||||
|
||||
req_payload.vmid = vmid;
|
||||
|
||||
resp_payload = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_CLOSE,
|
||||
&req_payload, sizeof(req_payload),
|
||||
&resp_payload_size, &reply_err_code);
|
||||
if (reply_err_code || IS_ERR_OR_NULL(resp_payload)) {
|
||||
err = PTR_ERR(resp_payload);
|
||||
pr_err("%s: CONSOLE_CLOSE failed with err: %d\n",
|
||||
__func__, err);
|
||||
goto out;
|
||||
resp = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_CLOSE,
|
||||
&req_payload, sizeof(req_payload),
|
||||
&resp_payload_size, &reply_err_code);
|
||||
if (IS_ERR(resp)) {
|
||||
pr_err("%s: Unable to send CONSOLE_CLOSE to RM: %d\n", __func__,
|
||||
PTR_ERR(resp));
|
||||
return PTR_ERR(resp);
|
||||
}
|
||||
|
||||
if (resp_payload_size != sizeof(*resp_payload)) {
|
||||
if (reply_err_code) {
|
||||
pr_err("%s: CONSOLE_CLOSE returned error: %d\n", __func__,
|
||||
reply_err_code);
|
||||
return reply_err_code;
|
||||
}
|
||||
|
||||
if (resp_payload_size) {
|
||||
pr_err("%s: Invalid size received for CONSOLE_CLOSE: %u\n",
|
||||
__func__, resp_payload_size);
|
||||
err = -EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = err ? : resp_payload->response;
|
||||
kfree(resp_payload);
|
||||
out:
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(hh_rm_console_close);
|
||||
|
||||
|
|
@ -500,10 +504,10 @@ EXPORT_SYMBOL(hh_rm_console_close);
|
|||
*/
|
||||
int hh_rm_console_write(hh_vmid_t vmid, const char *buf, size_t size)
|
||||
{
|
||||
struct hh_vm_console_write_resp_payload *resp_payload;
|
||||
void *resp;
|
||||
struct hh_vm_console_write_req_payload *req_payload;
|
||||
size_t resp_payload_size;
|
||||
int err = 0, reply_err_code = 0;
|
||||
int reply_err_code = 0;
|
||||
size_t req_payload_size = sizeof(*req_payload) + size;
|
||||
|
||||
if (size < 1 || size > U32_MAX)
|
||||
|
|
@ -518,27 +522,30 @@ int hh_rm_console_write(hh_vmid_t vmid, const char *buf, size_t size)
|
|||
req_payload->num_bytes = size;
|
||||
memcpy(req_payload->data, buf, size);
|
||||
|
||||
resp_payload = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_WRITE,
|
||||
req_payload, req_payload_size,
|
||||
&resp_payload_size, &reply_err_code);
|
||||
if (reply_err_code || IS_ERR_OR_NULL(resp_payload)) {
|
||||
err = PTR_ERR(resp_payload);
|
||||
pr_err("%s: CONSOLE_WRITE failed with err: %d\n",
|
||||
__func__, err);
|
||||
goto out;
|
||||
resp = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_WRITE,
|
||||
req_payload, req_payload_size,
|
||||
&resp_payload_size, &reply_err_code);
|
||||
kfree(req_payload);
|
||||
|
||||
if (IS_ERR(resp)) {
|
||||
pr_err("%s: Unable to send CONSOLE_WRITE to RM: %d\n", __func__,
|
||||
PTR_ERR(resp));
|
||||
return PTR_ERR(resp);
|
||||
}
|
||||
|
||||
if (resp_payload_size != sizeof(*resp_payload)) {
|
||||
if (reply_err_code) {
|
||||
pr_err("%s: CONSOLE_WRITE returned error: %d\n", __func__,
|
||||
reply_err_code);
|
||||
return reply_err_code;
|
||||
}
|
||||
|
||||
if (resp_payload_size) {
|
||||
pr_err("%s: Invalid size received for CONSOLE_WRITE: %u\n",
|
||||
__func__, resp_payload_size);
|
||||
err = -EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = err ? : resp_payload->response;
|
||||
kfree(resp_payload);
|
||||
out:
|
||||
kfree(req_payload);
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(hh_rm_console_write);
|
||||
|
||||
|
|
@ -548,33 +555,36 @@ EXPORT_SYMBOL(hh_rm_console_write);
|
|||
*/
|
||||
int hh_rm_console_flush(hh_vmid_t vmid)
|
||||
{
|
||||
struct hh_vm_console_common_resp_payload *resp_payload;
|
||||
void *resp;
|
||||
struct hh_vm_console_common_req_payload req_payload = {0};
|
||||
size_t resp_payload_size;
|
||||
int err = 0, reply_err_code = 0;
|
||||
int reply_err_code = 0;
|
||||
|
||||
req_payload.vmid = vmid;
|
||||
|
||||
resp_payload = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_FLUSH,
|
||||
resp = hh_rm_call(HH_RM_RPC_MSG_ID_CALL_VM_CONSOLE_FLUSH,
|
||||
&req_payload, sizeof(req_payload),
|
||||
&resp_payload_size, &reply_err_code);
|
||||
if (reply_err_code || IS_ERR_OR_NULL(resp_payload)) {
|
||||
err = PTR_ERR(resp_payload);
|
||||
pr_err("%s: CONSOLE_FLUSH failed with err: %d\n",
|
||||
__func__, err);
|
||||
goto out;
|
||||
|
||||
if (IS_ERR(resp)) {
|
||||
pr_err("%s: Unable to send CONSOLE_FLUSH to RM: %d\n", __func__,
|
||||
PTR_ERR(resp));
|
||||
return PTR_ERR(resp);
|
||||
}
|
||||
|
||||
if (resp_payload_size != sizeof(*resp_payload)) {
|
||||
if (reply_err_code) {
|
||||
pr_err("%s: CONSOLE_FLUSH returned error: %d\n", __func__,
|
||||
reply_err_code);
|
||||
return reply_err_code;
|
||||
}
|
||||
|
||||
if (resp_payload_size) {
|
||||
pr_err("%s: Invalid size received for CONSOLE_FLUSH: %u\n",
|
||||
__func__, resp_payload_size);
|
||||
err = -EINVAL;
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
err = err ? : resp_payload->response;
|
||||
kfree(resp_payload);
|
||||
out:
|
||||
return err;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(hh_rm_console_flush);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue