libpldm: Add APIs to get Op Enumerate's encoded request/decoded response

Additionally also update the API the provide encoded Op Kill
and Op Complete requests, to accept resource and operation IDs,
instead of the context.

Tested:
Verfied that the client is able to receive and use the
enocded requests for all the affected APIs.

Google-Bug-Id: 325680381
Google-Bug-Id: 325680612
Change-Id: I3113bf9bc3fb7670d9fafdf76d29fd9745b54b97
Signed-off-by: Nikhil Namjoshi <nikhilnamjoshi@google.com>
diff --git a/recipes-phosphor/libpldm/libpldm/0008-Add-APIs-to-get-Op-Enumerate-s-encoded-request-and-d.patch b/recipes-phosphor/libpldm/libpldm/0008-Add-APIs-to-get-Op-Enumerate-s-encoded-request-and-d.patch
new file mode 100644
index 0000000..8f927bd
--- /dev/null
+++ b/recipes-phosphor/libpldm/libpldm/0008-Add-APIs-to-get-Op-Enumerate-s-encoded-request-and-d.patch
@@ -0,0 +1,141 @@
+From 67872c7f29e902445b2298f9f9173981a488b8ec Mon Sep 17 00:00:00 2001
+From: Nikhil Namjoshi <nikhilnamjoshi@google.com>
+Date: Wed, 14 Feb 2024 23:31:06 +0000
+Subject: [PATCH] Add APIs to get Op Enumerate's encoded request and decoded
+ response
+
+Additionally also update the API the provide encoded Op Kill
+and Op Complete requests, to accept resource and operation IDs,
+instead of the context.
+
+Tested:
+Verfied that the client is able to receive and use the
+enocded requests for all the affected APIs.
+
+Patch Tracking Bug: b/325680381
+Upstream info / review: NA
+Upstream-Status: Pending
+Justification:
+There is dependency on upstreaming rded first, followed
+by other libpldm command support like OperationInit,
+Operation,Status, OperationComplete and OperationKill
+
+Change-Id: Iac15c3364f04dc0be1391ea11eb76235935fc210
+Signed-off-by: Nikhil Namjoshi <nikhilnamjoshi@google.com>
+---
+ .../libpldm/requester/pldm_rde_requester.h    | 27 ++++++++++---
+ src/requester/pldm_rde_requester.c            | 39 +++++++++++++------
+ 2 files changed, 49 insertions(+), 17 deletions(-)
+
+diff --git a/include/libpldm/requester/pldm_rde_requester.h b/include/libpldm/requester/pldm_rde_requester.h
+index d96f6f4..92ced28 100644
+--- a/include/libpldm/requester/pldm_rde_requester.h
++++ b/include/libpldm/requester/pldm_rde_requester.h
+@@ -227,7 +227,7 @@ pldm_rde_init_context(const char *device_id, int net_id,
+ 		      bitfield16_t *mc_features, uint8_t number_of_resources,
+ 		      uint32_t *resource_id_address,
+ 		      struct pldm_rde_requester_context *(*alloc_requester_ctx)(
+-			  uint8_t number_of_ctx),
++		          uint8_t number_of_ctx),
+ 
+ 		      // Callback function to clean any context memory
+ 		      void (*free_requester_ctx)(void *ctx_memory));
+@@ -421,15 +421,32 @@ pldm_rde_requester_rc_t free_op_context_after_dictionary_extraction(
+  * @brief Provides the RDE Op complete request encoded
+  */
+ pldm_rde_requester_rc_t get_pldm_rde_operation_complete_request(
+-	uint8_t instance_id, struct pldm_rde_requester_context *current_ctx,
++	uint8_t instance_id, uint32_t resource_id, uint16_t operation_id,
+ 	struct pldm_msg *request);
+ 
++/**
++ * @brief Provides the encoded RDE Op Enumerate request
++ */
++pldm_rde_requester_rc_t
++get_pldm_rde_operation_enumerate_request(uint8_t instance_id,
++					 struct pldm_msg *request);
++
++/**
++ * @brief Provides the decoded RDE Op Enumerate response
++ */
++pldm_rde_requester_rc_t get_pldm_rde_operation_enumerate_response(
++	struct pldm_msg *response, uint8_t *completion_code,
++	uint16_t *operation_count,
++	struct pldm_rde_operation_enumerate_operation_data *operation_data,
++	uint16_t operation_data_array_size);
++
+ /**
+  * @brief Provides the RDE Op Kill request encoded
+  */
+-pldm_rde_requester_rc_t get_pldm_rde_operation_kill_request(
+-	uint8_t instance_id, struct pldm_rde_requester_context *current_ctx,
+-	struct pldm_msg *request);
++pldm_rde_requester_rc_t
++get_pldm_rde_operation_kill_request(uint8_t instance_id, uint32_t resource_id,
++				    uint16_t operation_id,
++				    struct pldm_msg *request);
+ /**
+  * =============== Workaround ends for b/293742455 ===================
+  */
+diff --git a/src/requester/pldm_rde_requester.c b/src/requester/pldm_rde_requester.c
+index 4f11b13..c7e1705 100644
+--- a/src/requester/pldm_rde_requester.c
++++ b/src/requester/pldm_rde_requester.c
+@@ -675,27 +675,42 @@ free_rde_op_init_context(struct pldm_rde_requester_context *ctx)
+  */
+ LIBPLDM_ABI_STABLE
+ pldm_rde_requester_rc_t get_pldm_rde_operation_complete_request(
+-    uint8_t instance_id, struct pldm_rde_requester_context *current_ctx,
+-    struct pldm_msg *request)
++    uint8_t instance_id, uint32_t resource_id,
++    uint16_t operation_id, struct pldm_msg *request)
+ {
+-	struct rde_operation *operation_ctx =
+-	    (struct rde_operation *)current_ctx->operation_ctx;
+ 	return encode_rde_operation_complete_req(
+-	    instance_id, operation_ctx->resource_id,
+-	    operation_ctx->operation_id, request);
++	    instance_id, resource_id,
++	    operation_id, request);
++}
++
++LIBPLDM_ABI_STABLE
++pldm_rde_requester_rc_t get_pldm_rde_operation_enumerate_request(
++    uint8_t instance_id, struct pldm_msg *request)
++{
++	return encode_rde_operation_enumerate_req(
++	    instance_id, request);
++}
++
++LIBPLDM_ABI_STABLE
++pldm_rde_requester_rc_t get_pldm_rde_operation_enumerate_response(
++    struct pldm_msg *response, uint8_t *completion_code,
++    uint16_t *operation_count,
++    struct pldm_rde_operation_enumerate_operation_data *operation_data,
++    uint16_t operation_data_array_size)
++{
++	return decode_rde_operation_enumerate_resp(
++	    response, completion_code, operation_count,
++		operation_data, operation_data_array_size);
+ }
+ 
+ LIBPLDM_ABI_STABLE
+ pldm_rde_requester_rc_t get_pldm_rde_operation_kill_request(
+-    uint8_t instance_id, struct pldm_rde_requester_context *current_ctx,
++    uint8_t instance_id, uint32_t resource_id, uint16_t operation_id,
+     struct pldm_msg *request)
+ {
+-	struct rde_operation *operation_ctx =
+-	    (struct rde_operation *)current_ctx->operation_ctx;
+-
+ 	return encode_rde_operation_kill_req(
+-	    instance_id, operation_ctx->resource_id,
+-	    operation_ctx->operation_id, request);
++	    instance_id, resource_id,
++	    operation_id, request);
+ }
+ /**
+  * =============== Workaround ends ===================
+-- 
+2.44.0.rc0.258.g7320e95886-goog
+
diff --git a/recipes-phosphor/libpldm/libpldm_%.bbappend b/recipes-phosphor/libpldm/libpldm_%.bbappend
index d80cb31..b854722 100644
--- a/recipes-phosphor/libpldm/libpldm_%.bbappend
+++ b/recipes-phosphor/libpldm/libpldm_%.bbappend
@@ -10,4 +10,5 @@
     file://0005-Add-support-for-dictionary-extraction-for-resources.patch \
     file://0006-Fix-memory-issue-in-rde.patch \
     file://0007-Adding-RDEOperationEnumerate-support.patch \
+    file://0008-Add-APIs-to-get-Op-Enumerate-s-encoded-request-and-d.patch \
 "