diff mbox

[v3,13/40] misc/mei/hdcp: Verify L_prime

Message ID 1522763873-23041-14-git-send-email-ramalingam.c@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ramalingam C April 3, 2018, 1:57 p.m. UTC
Request to ME to verify the LPrime received from HDCP sink.

On Success, ME FW will verify the received Lprime by calculating and
comparing with L.

This represents the completion of Locality Check.

v2:
  Rebased.
v3:
  cldev is passed as first parameter [Tomas]
  Redundant comments and cast are removed [Tomas]

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
---
 drivers/misc/mei/hdcp/mei_hdcp.c | 59 ++++++++++++++++++++++++++++++++++++++++
 include/linux/mei_hdcp.h         |  8 ++++++
 2 files changed, 67 insertions(+)

Comments

Shankar, Uma May 9, 2018, 10:36 a.m. UTC | #1
>-----Original Message-----

>From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of

>Ramalingam C

>Sent: Tuesday, April 3, 2018 7:27 PM

>To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;

>seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk;

>jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>;

>Usyskin, Alexander <alexander.usyskin@intel.com>

>Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>

>Subject: [Intel-gfx] [PATCH v3 13/40] misc/mei/hdcp: Verify L_prime

>

>Request to ME to verify the LPrime received from HDCP sink.

>

>On Success, ME FW will verify the received Lprime by calculating and comparing

>with L.

>

>This represents the completion of Locality Check.

>

>v2:

>  Rebased.

>v3:

>  cldev is passed as first parameter [Tomas]

>  Redundant comments and cast are removed [Tomas]

>

>Signed-off-by: Ramalingam C <ramalingam.c@intel.com>

>---

> drivers/misc/mei/hdcp/mei_hdcp.c | 59

>++++++++++++++++++++++++++++++++++++++++

> include/linux/mei_hdcp.h         |  8 ++++++

> 2 files changed, 67 insertions(+)

>

>diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c

>b/drivers/misc/mei/hdcp/mei_hdcp.c

>index 9bd7e66a91e4..ea84177311b7 100644

>--- a/drivers/misc/mei/hdcp/mei_hdcp.c

>+++ b/drivers/misc/mei/hdcp/mei_hdcp.c

>@@ -361,6 +361,65 @@ int mei_initiate_locality_check(struct mei_cl_device

>*cldev,  }  EXPORT_SYMBOL(mei_initiate_locality_check);

>

>+/**

>+ * mei_verify_lprime:

>+ *	Function to verify lprime.

>+ *

>+ * @cldev		: Pointer for mei client device

>+ * @data		: Intel HW specific Data

>+ * @rx_lprime		: Pointer for LC_Send_L_prime

>+ *

>+ * Returns 0 on Success, <0 on Failure

>+ */

>+int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,

>+		      struct hdcp2_lc_send_lprime *rx_lprime) {

>+	struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } };

>+	struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } };

>+	struct device *dev;

>+	ssize_t byte;

>+

>+	if (!data || !rx_lprime)

>+		return -EINVAL;

>+

>+	dev = &cldev->dev;

>+

>+	verify_lprime_in.header.api_version = HDCP_API_VERSION;

>+	verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY;

>+	verify_lprime_in.header.status = ME_HDCP_STATUS_SUCCESS;

>+	verify_lprime_in.header.buffer_len =

>+

>	WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN;

>+

>+	verify_lprime_in.port.integrated_port_type = data->port_type;

>+	verify_lprime_in.port.physical_port = data->port;

>+

>+	memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime,


Validate rx_lprime->l_prime for NULL

>+	       sizeof(rx_lprime->l_prime));

>+

>+	byte = mei_cldev_send(cldev, (u8 *)&verify_lprime_in,

>+			      sizeof(verify_lprime_in));

>+	if (byte < 0) {

>+		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);

>+		return byte;

>+	}

>+

>+	byte = mei_cldev_recv(cldev, (u8 *)&verify_lprime_out,

>+			      sizeof(verify_lprime_out));

>+	if (byte < 0) {

>+		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);

>+		return byte;

>+	}

>+

>+	if (verify_lprime_out.header.status != ME_HDCP_STATUS_SUCCESS) {

>+		dev_dbg(dev, "ME cmd 0x%08X failed. status: 0x%X\n",

>+			WIRED_VALIDATE_LOCALITY,

>+			verify_lprime_out.header.status);

>+		return -1;

>+	}


Leave a blank line.

>+	return 0;

>+}

>+EXPORT_SYMBOL(mei_verify_lprime);

>+

> void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool enabled)  {

> 	if (enabled)

>diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h index

>d9c4cac0b276..792143563c46 100644

>--- a/include/linux/mei_hdcp.h

>+++ b/include/linux/mei_hdcp.h

>@@ -124,6 +124,8 @@ int mei_store_pairing_info(struct mei_cl_device *cldev,

>int mei_initiate_locality_check(struct mei_cl_device *cldev,

> 				struct mei_hdcp_data *data,

> 				struct hdcp2_lc_init *lc_init_data);

>+int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,

>+		      struct hdcp2_lc_send_lprime *rx_lprime);

> #else

> static int mei_cldev_register_notify(struct notifier_block *nb)  { @@ -170,5

>+172,11 @@ int mei_initiate_locality_check(struct mei_cl_device *cldev,  {

> 	return -ENODEV;

> }

>+static inline

>+int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,

>+		      struct hdcp2_lc_send_lprime *rx_lprime) {

>+	return -ENODEV;

>+}

> #endif /* defined (CONFIG_INTEL_MEI_HDCP) */  #endif /* defined

>(_LINUX_MEI_HDCP_H) */

>--

>2.7.4

>

>_______________________________________________

>Intel-gfx mailing list

>Intel-gfx@lists.freedesktop.org

>https://lists.freedesktop.org/mailman/listinfo/intel-gfx
Ramalingam C May 16, 2018, 4:05 p.m. UTC | #2
On Wednesday 09 May 2018 04:06 PM, Shankar, Uma wrote:
>
>> -----Original Message-----
>> From: Intel-gfx [mailto:intel-gfx-bounces@lists.freedesktop.org] On Behalf Of
>> Ramalingam C
>> Sent: Tuesday, April 3, 2018 7:27 PM
>> To: intel-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org;
>> seanpaul@chromium.org; daniel@ffwll.ch; chris@chris-wilson.co.uk;
>> jani.nikula@linux.intel.com; Winkler, Tomas <tomas.winkler@intel.com>;
>> Usyskin, Alexander <alexander.usyskin@intel.com>
>> Cc: Vivi, Rodrigo <rodrigo.vivi@intel.com>
>> Subject: [Intel-gfx] [PATCH v3 13/40] misc/mei/hdcp: Verify L_prime
>>
>> Request to ME to verify the LPrime received from HDCP sink.
>>
>> On Success, ME FW will verify the received Lprime by calculating and comparing
>> with L.
>>
>> This represents the completion of Locality Check.
>>
>> v2:
>>   Rebased.
>> v3:
>>   cldev is passed as first parameter [Tomas]
>>   Redundant comments and cast are removed [Tomas]
>>
>> Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
>> ---
>> drivers/misc/mei/hdcp/mei_hdcp.c | 59
>> ++++++++++++++++++++++++++++++++++++++++
>> include/linux/mei_hdcp.h         |  8 ++++++
>> 2 files changed, 67 insertions(+)
>>
>> diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c
>> b/drivers/misc/mei/hdcp/mei_hdcp.c
>> index 9bd7e66a91e4..ea84177311b7 100644
>> --- a/drivers/misc/mei/hdcp/mei_hdcp.c
>> +++ b/drivers/misc/mei/hdcp/mei_hdcp.c
>> @@ -361,6 +361,65 @@ int mei_initiate_locality_check(struct mei_cl_device
>> *cldev,  }  EXPORT_SYMBOL(mei_initiate_locality_check);
>>
>> +/**
>> + * mei_verify_lprime:
>> + *	Function to verify lprime.
>> + *
>> + * @cldev		: Pointer for mei client device
>> + * @data		: Intel HW specific Data
>> + * @rx_lprime		: Pointer for LC_Send_L_prime
>> + *
>> + * Returns 0 on Success, <0 on Failure
>> + */
>> +int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
>> +		      struct hdcp2_lc_send_lprime *rx_lprime) {
>> +	struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } };
>> +	struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } };
>> +	struct device *dev;
>> +	ssize_t byte;
>> +
>> +	if (!data || !rx_lprime)
>> +		return -EINVAL;
>> +
>> +	dev = &cldev->dev;
>> +
>> +	verify_lprime_in.header.api_version = HDCP_API_VERSION;
>> +	verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY;
>> +	verify_lprime_in.header.status = ME_HDCP_STATUS_SUCCESS;
>> +	verify_lprime_in.header.buffer_len =
>> +
>> 	WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN;
>> +
>> +	verify_lprime_in.port.integrated_port_type = data->port_type;
>> +	verify_lprime_in.port.physical_port = data->port;
>> +
>> +	memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime,
> Validate rx_lprime->l_prime for NULL
>
>> +	       sizeof(rx_lprime->l_prime));
>> +
>> +	byte = mei_cldev_send(cldev, (u8 *)&verify_lprime_in,
>> +			      sizeof(verify_lprime_in));
>> +	if (byte < 0) {
>> +		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
>> +		return byte;
>> +	}
>> +
>> +	byte = mei_cldev_recv(cldev, (u8 *)&verify_lprime_out,
>> +			      sizeof(verify_lprime_out));
>> +	if (byte < 0) {
>> +		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
>> +		return byte;
>> +	}
>> +
>> +	if (verify_lprime_out.header.status != ME_HDCP_STATUS_SUCCESS) {
>> +		dev_dbg(dev, "ME cmd 0x%08X failed. status: 0x%X\n",
>> +			WIRED_VALIDATE_LOCALITY,
>> +			verify_lprime_out.header.status);
>> +		return -1;
>> +	}
> Leave a blank line.
Ok sure.
--Ram
>
>> +	return 0;
>> +}
>> +EXPORT_SYMBOL(mei_verify_lprime);
>> +
>> void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool enabled)  {
>> 	if (enabled)
>> diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h index
>> d9c4cac0b276..792143563c46 100644
>> --- a/include/linux/mei_hdcp.h
>> +++ b/include/linux/mei_hdcp.h
>> @@ -124,6 +124,8 @@ int mei_store_pairing_info(struct mei_cl_device *cldev,
>> int mei_initiate_locality_check(struct mei_cl_device *cldev,
>> 				struct mei_hdcp_data *data,
>> 				struct hdcp2_lc_init *lc_init_data);
>> +int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
>> +		      struct hdcp2_lc_send_lprime *rx_lprime);
>> #else
>> static int mei_cldev_register_notify(struct notifier_block *nb)  { @@ -170,5
>> +172,11 @@ int mei_initiate_locality_check(struct mei_cl_device *cldev,  {
>> 	return -ENODEV;
>> }
>> +static inline
>> +int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
>> +		      struct hdcp2_lc_send_lprime *rx_lprime) {
>> +	return -ENODEV;
>> +}
>> #endif /* defined (CONFIG_INTEL_MEI_HDCP) */  #endif /* defined
>> (_LINUX_MEI_HDCP_H) */
>> --
>> 2.7.4
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/drivers/misc/mei/hdcp/mei_hdcp.c b/drivers/misc/mei/hdcp/mei_hdcp.c
index 9bd7e66a91e4..ea84177311b7 100644
--- a/drivers/misc/mei/hdcp/mei_hdcp.c
+++ b/drivers/misc/mei/hdcp/mei_hdcp.c
@@ -361,6 +361,65 @@  int mei_initiate_locality_check(struct mei_cl_device *cldev,
 }
 EXPORT_SYMBOL(mei_initiate_locality_check);
 
+/**
+ * mei_verify_lprime:
+ *	Function to verify lprime.
+ *
+ * @cldev		: Pointer for mei client device
+ * @data		: Intel HW specific Data
+ * @rx_lprime		: Pointer for LC_Send_L_prime
+ *
+ * Returns 0 on Success, <0 on Failure
+ */
+int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
+		      struct hdcp2_lc_send_lprime *rx_lprime)
+{
+	struct wired_cmd_validate_locality_in verify_lprime_in = { { 0 } };
+	struct wired_cmd_validate_locality_out verify_lprime_out = { { 0 } };
+	struct device *dev;
+	ssize_t byte;
+
+	if (!data || !rx_lprime)
+		return -EINVAL;
+
+	dev = &cldev->dev;
+
+	verify_lprime_in.header.api_version = HDCP_API_VERSION;
+	verify_lprime_in.header.command_id = WIRED_VALIDATE_LOCALITY;
+	verify_lprime_in.header.status = ME_HDCP_STATUS_SUCCESS;
+	verify_lprime_in.header.buffer_len =
+					WIRED_CMD_BUF_LEN_VALIDATE_LOCALITY_IN;
+
+	verify_lprime_in.port.integrated_port_type = data->port_type;
+	verify_lprime_in.port.physical_port = data->port;
+
+	memcpy(verify_lprime_in.l_prime, rx_lprime->l_prime,
+	       sizeof(rx_lprime->l_prime));
+
+	byte = mei_cldev_send(cldev, (u8 *)&verify_lprime_in,
+			      sizeof(verify_lprime_in));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_send failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	byte = mei_cldev_recv(cldev, (u8 *)&verify_lprime_out,
+			      sizeof(verify_lprime_out));
+	if (byte < 0) {
+		dev_dbg(dev, "mei_cldev_recv failed. %d\n", (int)byte);
+		return byte;
+	}
+
+	if (verify_lprime_out.header.status != ME_HDCP_STATUS_SUCCESS) {
+		dev_dbg(dev, "ME cmd 0x%08X failed. status: 0x%X\n",
+			WIRED_VALIDATE_LOCALITY,
+			verify_lprime_out.header.status);
+		return -1;
+	}
+	return 0;
+}
+EXPORT_SYMBOL(mei_verify_lprime);
+
 void mei_cldev_state_notify_clients(struct mei_cl_device *cldev, bool enabled)
 {
 	if (enabled)
diff --git a/include/linux/mei_hdcp.h b/include/linux/mei_hdcp.h
index d9c4cac0b276..792143563c46 100644
--- a/include/linux/mei_hdcp.h
+++ b/include/linux/mei_hdcp.h
@@ -124,6 +124,8 @@  int mei_store_pairing_info(struct mei_cl_device *cldev,
 int mei_initiate_locality_check(struct mei_cl_device *cldev,
 				struct mei_hdcp_data *data,
 				struct hdcp2_lc_init *lc_init_data);
+int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
+		      struct hdcp2_lc_send_lprime *rx_lprime);
 #else
 static int mei_cldev_register_notify(struct notifier_block *nb)
 {
@@ -170,5 +172,11 @@  int mei_initiate_locality_check(struct mei_cl_device *cldev,
 {
 	return -ENODEV;
 }
+static inline
+int mei_verify_lprime(struct mei_cl_device *cldev, struct mei_hdcp_data *data,
+		      struct hdcp2_lc_send_lprime *rx_lprime)
+{
+	return -ENODEV;
+}
 #endif /* defined (CONFIG_INTEL_MEI_HDCP) */
 #endif /* defined (_LINUX_MEI_HDCP_H) */