diff options
| author | Ajay Singh Parmar <aparmar@codeaurora.org> | 2015-10-01 13:24:06 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:46:20 -0700 |
| commit | 38fdd3f630696356da2575fe8f0ea51cecd95b5c (patch) | |
| tree | 8d9eea7c7a9274d0eb9b218df9c6cad5597648e7 /include/linux | |
| parent | e8591b7730777af87c1ea2b6d7742118c2531bf3 (diff) | |
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 <aparmar@codeaurora.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/hdcp_qseecom.h | 97 |
1 files changed, 58 insertions, 39 deletions
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 <linux/types.h> 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, |
