From 38fdd3f630696356da2575fe8f0ea51cecd95b5c Mon Sep 17 00:00:00 2001 From: Ajay Singh Parmar Date: Thu, 1 Oct 2015 13:24:06 -0700 Subject: msm: mdss: hdmi: cleanup wakeup calls Do not lock in wakeup functions as it may block current thread. Wakeup can trigger a callback looking to acquire same lock. Also rename the wakeup command names to properly identify client and lib commands. Change-Id: I28411714d2d7f0104364726fc5ce0593e5ccff91 Signed-off-by: Ajay Singh Parmar --- include/linux/hdcp_qseecom.h | 97 ++++++++++++++++++++++++++------------------ 1 file changed, 58 insertions(+), 39 deletions(-) (limited to 'include/linux') diff --git a/include/linux/hdcp_qseecom.h b/include/linux/hdcp_qseecom.h index 8d7f19ad97ff..51cc4a1b6e6e 100644 --- a/include/linux/hdcp_qseecom.h +++ b/include/linux/hdcp_qseecom.h @@ -15,63 +15,83 @@ #include enum hdcp_lib_wakeup_cmd { - HDCP_WKUP_CMD_START, - HDCP_WKUP_CMD_STOP, - HDCP_WKUP_CMD_MSG_SEND_SUCCESS, - HDCP_WKUP_CMD_MSG_SEND_FAILED, - HDCP_WKUP_CMD_MSG_RECV_SUCCESS, - HDCP_WKUP_CMD_MSG_RECV_FAILED, - HDCP_WKUP_CMD_MSG_RECV_TIMEOUT, + HDCP_LIB_WKUP_CMD_INVALID, + HDCP_LIB_WKUP_CMD_START, + HDCP_LIB_WKUP_CMD_STOP, + HDCP_LIB_WKUP_CMD_MSG_SEND_SUCCESS, + HDCP_LIB_WKUP_CMD_MSG_SEND_FAILED, + HDCP_LIB_WKUP_CMD_MSG_RECV_SUCCESS, + HDCP_LIB_WKUP_CMD_MSG_RECV_FAILED, + HDCP_LIB_WKUP_CMD_MSG_RECV_TIMEOUT, }; -enum hdmi_hdcp_cmd { - HDMI_HDCP_SEND_MESSAGE, - HDMI_HDCP_RECV_MESSAGE, - HDMI_HDCP_STATUS_SUCCESS, - HDMI_HDCP_STATUS_FAIL +enum hdmi_hdcp_wakeup_cmd { + HDMI_HDCP_WKUP_CMD_INVALID, + HDMI_HDCP_WKUP_CMD_SEND_MESSAGE, + HDMI_HDCP_WKUP_CMD_RECV_MESSAGE, + HDMI_HDCP_WKUP_CMD_STATUS_SUCCESS, + HDMI_HDCP_WKUP_CMD_STATUS_FAILED, + HDMI_HDCP_WKUP_CMD_AUTHENTICATE +}; + +struct hdcp_lib_wakeup_data { + enum hdcp_lib_wakeup_cmd cmd; + void *context; + char *recvd_msg_buf; + uint32_t recvd_msg_len; + uint32_t timeout; +}; + +struct hdmi_hdcp_wakeup_data { + enum hdmi_hdcp_wakeup_cmd cmd; + void *context; + char *send_msg_buf; + uint32_t send_msg_len; + uint32_t timeout; }; static inline char *hdmi_hdcp_cmd_to_str(uint32_t cmd) { switch (cmd) { - case HDMI_HDCP_SEND_MESSAGE: - return "HDMI_HDCP_SEND_MESSAGE"; - case HDMI_HDCP_RECV_MESSAGE: - return "HDMI_HDCP_RECV_MESSAGE"; - case HDMI_HDCP_STATUS_SUCCESS: - return "HDMI_HDCP_STATUS_SUCCESS"; - case HDMI_HDCP_STATUS_FAIL: - return "HDMI_HDCP_STATUS_FAIL"; + case HDMI_HDCP_WKUP_CMD_SEND_MESSAGE: + return "HDMI_HDCP_WKUP_CMD_SEND_MESSAGE"; + case HDMI_HDCP_WKUP_CMD_RECV_MESSAGE: + return "HDMI_HDCP_WKUP_CMD_RECV_MESSAGE"; + case HDMI_HDCP_WKUP_CMD_STATUS_SUCCESS: + return "HDMI_HDCP_WKUP_CMD_STATUS_SUCCESS"; + case HDMI_HDCP_WKUP_CMD_STATUS_FAILED: + return "HDMI_HDCP_WKUP_CMD_STATUS_FAIL"; + case HDMI_HDCP_WKUP_CMD_AUTHENTICATE: + return "HDMI_HDCP_WKUP_CMD_AUTHENTICATE"; default: return "???"; } } -static inline char *hdcp_cmd_to_str(uint32_t cmd) +static inline char *hdcp_lib_cmd_to_str(uint32_t cmd) { switch (cmd) { - case HDCP_WKUP_CMD_START: - return "HDCP_WKUP_CMD_START"; - case HDCP_WKUP_CMD_STOP: - return "HDCP_WKUP_CMD_STOP"; - case HDCP_WKUP_CMD_MSG_SEND_SUCCESS: - return "HDCP_WKUP_CMD_MSG_SEND_SUCCESS"; - case HDCP_WKUP_CMD_MSG_SEND_FAILED: - return "HDCP_WKUP_CMD_MSG_SEND_FAILED"; - case HDCP_WKUP_CMD_MSG_RECV_SUCCESS: - return "HDCP_WKUP_CMD_MSG_RECV_SUCCESS"; - case HDCP_WKUP_CMD_MSG_RECV_FAILED: - return "HDCP_WKUP_CMD_MSG_RECV_FAILED"; - case HDCP_WKUP_CMD_MSG_RECV_TIMEOUT: - return "HDCP_WKUP_CMD_MSG_RECV_TIMEOUT"; + case HDCP_LIB_WKUP_CMD_START: + return "HDCP_LIB_WKUP_CMD_START"; + case HDCP_LIB_WKUP_CMD_STOP: + return "HDCP_LIB_WKUP_CMD_STOP"; + case HDCP_LIB_WKUP_CMD_MSG_SEND_SUCCESS: + return "HDCP_LIB_WKUP_CMD_MSG_SEND_SUCCESS"; + case HDCP_LIB_WKUP_CMD_MSG_SEND_FAILED: + return "HDCP_LIB_WKUP_CMD_MSG_SEND_FAILED"; + case HDCP_LIB_WKUP_CMD_MSG_RECV_SUCCESS: + return "HDCP_LIB_WKUP_CMD_MSG_RECV_SUCCESS"; + case HDCP_LIB_WKUP_CMD_MSG_RECV_FAILED: + return "HDCP_LIB_WKUP_CMD_MSG_RECV_FAILED"; + case HDCP_LIB_WKUP_CMD_MSG_RECV_TIMEOUT: + return "HDCP_LIB_WKUP_CMD_MSG_RECV_TIMEOUT"; default: return "???"; } } struct hdcp_txmtr_ops { - int (*wakeup)(void *phdcpcontext, enum hdcp_lib_wakeup_cmd cmd, - char *msg, uint32_t len); + int (*wakeup)(struct hdcp_lib_wakeup_data *data); bool (*feature_supported)(void *phdcpcontext); int (*hdcp_txmtr_get_state)(void *phdcpcontext, @@ -80,8 +100,7 @@ struct hdcp_txmtr_ops { }; struct hdcp_client_ops { - int (*wakeup)(void *client_ctx, enum hdmi_hdcp_cmd cmd, - char *msg, uint32_t msglen, uint32_t timeout); + int (*wakeup)(struct hdmi_hdcp_wakeup_data *data); }; int hdcp_library_register(void **pphdcpcontext, -- cgit v1.2.3