diff --git a/include/transfer_list.h b/include/transfer_list.h
index 0d9b5a3..f42b9c0 100644
--- a/include/transfer_list.h
+++ b/include/transfer_list.h
@@ -125,48 +125,227 @@
 LIBTL_STATIC_ASSERT(sizeof(struct transfer_list_entry) == 0x8U,
 		    assert_transfer_list_entry_size);
 
-void transfer_list_dump(struct transfer_list_header *tl);
-void transfer_entry_dump(struct transfer_list_entry *te);
-struct transfer_list_header *transfer_list_ensure(void *addr, size_t size);
+/**
+ * Initialize a transfer list in a reserved memory region.
+ *
+ * Sets up an empty transfer list at the specified address. Ensures alignment
+ * and zeroes the region. Compliant to 2.4.5 of Firmware Handoff specification
+ * (v0.9).
+ *
+ * @param[in]  addr      Pointer to memory to initialize as a transfer list.
+ * @param[in]  max_size  Total size of the memory region in bytes.
+ *
+ * @return Pointer to the initialized transfer list, or NULL on error.
+ */
 struct transfer_list_header *transfer_list_init(void *addr, size_t max_size);
 
+/**
+ * Relocate a transfer list to a new memory region.
+ *
+ * Moves an existing transfer list to a new location while preserving alignment
+ * and contents. Updates internal pointers and checksum accordingly. Compliant
+ * to 2.4.6 of Firmware Handoff specification (v0.9).
+ *
+ * @param[in]  tl        Pointer to the existing transfer list.
+ * @param[in]  addr      Target address for relocation.
+ * @param[in]  max_size  Size of the target memory region in bytes.
+ *
+ * @return Pointer to the relocated transfer list, or NULL on error.
+ */
 struct transfer_list_header *
 transfer_list_relocate(struct transfer_list_header *tl, void *addr,
 		       size_t max_size);
+
+/**
+ * Check the validity of a transfer list header.
+ *
+ * Validates signature, size, version, and checksum of a transfer list.
+ * Compliant to 2.4.1 of Firmware Handoff specification (v0.9)
+ *
+ * @param[in] tl  Pointer to the transfer list to verify.
+ *
+ * @return A transfer_list_ops code indicating valid operations.
+ */
 enum transfer_list_ops
 transfer_list_check_header(const struct transfer_list_header *tl);
 
+/**
+ * Get the next transfer entry in the list.
+ *
+ * Enumerates transfer entries starting from the given entry or from the beginning.
+ *
+ * @param[in]  tl    Pointer to the transfer list.
+ * @param[in]  last  Pointer to the previous entry, or NULL to start at the beginning.
+ *
+ * @return Pointer to the next valid entry, or NULL on error or end of list.
+ */
+struct transfer_list_entry *
+transfer_list_next(struct transfer_list_header *tl,
+		   struct transfer_list_entry *last);
+
+/**
+ * Get the previous transfer entry in the list.
+ *
+ * Enumerates transfer entries backward from the given entry.
+ *
+ * @param[in]  tl    Pointer to the transfer list.
+ * @param[in]  last  Pointer to the current entry.
+ *
+ * @return Pointer to the previous valid entry, or NULL on error or start of list.
+ */
+struct transfer_list_entry *
+transfer_list_prev(struct transfer_list_header *tl,
+		   struct transfer_list_entry *last);
+
+/**
+ * Update the checksum of a transfer list.
+ *
+ * Recomputes and updates the checksum field based on current contents.
+ *
+ * @param[in,out] tl  Pointer to the transfer list to update.
+ */
 void transfer_list_update_checksum(struct transfer_list_header *tl);
+
+/**
+ * Verify the checksum of a transfer list.
+ *
+ * Computes and checks the checksum against the stored value.
+ *
+ * @param[in] tl  Pointer to the transfer list to verify.
+ *
+ * @return true if checksum is valid, false otherwise.
+ */
 bool transfer_list_verify_checksum(const struct transfer_list_header *tl);
 
+/**
+ * Set the data size of a transfer entry.
+ *
+ * Modifies the data size field of a given entry and adjusts subsequent entries.
+ *
+ * @param[in,out] tl            Pointer to the parent transfer list.
+ * @param[in,out] te            Pointer to the entry to modify.
+ * @param[in]     new_data_size New size of the entry data in bytes.
+ *
+ * @return true on success, false on error.
+ */
 bool transfer_list_set_data_size(struct transfer_list_header *tl,
-				 struct transfer_list_entry *entry,
+				 struct transfer_list_entry *te,
 				 uint32_t new_data_size);
 
-void *transfer_list_entry_data(struct transfer_list_entry *entry);
+/**
+ * Remove a transfer entry by marking it as empty.
+ *
+ * Clears the tag of a given entry and updates the list checksum.
+ *
+ * @param[in,out] tl  Pointer to the transfer list.
+ * @param[in,out] te  Pointer to the entry to remove.
+ *
+ * @return true on success, false on error.
+ */
 bool transfer_list_rem(struct transfer_list_header *tl,
-		       struct transfer_list_entry *entry);
+		       struct transfer_list_entry *te);
 
+/**
+ * Add a new transfer entry to the list.
+ *
+ * Appends a new entry with specified tag and data to the list tail.
+ *
+ * @param[in,out] tl         Pointer to the transfer list.
+ * @param[in]     tag_id     Tag identifier for the new entry.
+ * @param[in]     data_size  Size of the entry data in bytes.
+ * @param[in]     data       Pointer to the data to copy (can be NULL).
+ *
+ * @return Pointer to the added entry, or NULL on error.
+ */
 struct transfer_list_entry *transfer_list_add(struct transfer_list_header *tl,
 					      uint32_t tag_id,
 					      uint32_t data_size,
 					      const void *data);
 
+/**
+ * Add a new transfer entry with specific alignment requirements.
+ *
+ * Inserts padding if needed to meet the alignment of the entry data.
+ *
+ * @param[in,out] tl         Pointer to the transfer list.
+ * @param[in]     tag_id     Tag identifier for the new entry.
+ * @param[in]     data_size  Size of the entry data in bytes.
+ * @param[in]     data       Pointer to the data to copy (can be NULL).
+ * @param[in]     alignment  Desired alignment (as log2 value).
+ *
+ * @return Pointer to the added entry, or NULL on error.
+ */
 struct transfer_list_entry *
 transfer_list_add_with_align(struct transfer_list_header *tl, uint32_t tag_id,
 			     uint32_t data_size, const void *data,
 			     uint8_t alignment);
 
-struct transfer_list_entry *
-transfer_list_next(struct transfer_list_header *tl,
-		   struct transfer_list_entry *last);
-
+/**
+ * Find an entry in the transfer list by tag.
+ *
+ * Search for an existing transfer entry with the specified tag id from a
+ * transfer list
+ *
+ * @param[in] tl      Pointer to the transfer list.
+ * @param[in] tag_id  Tag identifier to search for.
+ *
+ * @return Pointer to the found entry, or NULL if not found.
+ */
 struct transfer_list_entry *transfer_list_find(struct transfer_list_header *tl,
 					       uint32_t tag_id);
 
+/**
+ * Set handoff arguments in the entry point info structure.
+ *
+ * This function populates the provided entry point info structure with data
+ * from the transfer list.
+ *
+ * @param[in] tl        Pointer to the transfer list.
+ * @param[out] ep_info  Pointer to the entry point info structure to populate.
+ *
+ * @return Pointer to the populated entry point info structure.
+ */
 struct entry_point_info *
 transfer_list_set_handoff_args(struct transfer_list_header *tl,
 			       struct entry_point_info *ep_info);
 
+/**
+ * Get the data pointer of a transfer entry.
+ *
+ * Returns a pointer to the start of the entry's data buffer.
+ *
+ * @param[in] entry  Pointer to the transfer entry.
+ *
+ * @return Pointer to the data section, or NULL on error.
+ */
+void *transfer_list_entry_data(struct transfer_list_entry *entry);
+
+/**
+ * Ensure the transfer list is initialized.
+ *
+ * Verifies that the transfer list has not already been initialized, then
+ * initializes it at the specified memory location.
+ *
+ * @param[in]  addr  Pointer to the memory to verify or initialize.
+ * @param[in]  size  Size of the memory in bytes.
+ *
+ * @return Pointer to a valid transfer list, or NULL on error.
+ */
+struct transfer_list_header *transfer_list_ensure(void *addr, size_t size);
+
+/**
+ * Dump the contents of a transfer list.
+ *
+ * @param[in] tl   Pointer to the transfer list.
+ */
+void transfer_list_dump(struct transfer_list_header *tl);
+
+/**
+ * Dump the contents of a transfer entry.
+ *
+ * @param[in] te  Pointer to the transfer entry.
+ */
+void transfer_entry_dump(struct transfer_list_entry *te);
+
 #endif /* __ASSEMBLER__ */
 #endif /* TRANSFER_LIST_H */
diff --git a/src/arm/ep_info.c b/src/arm/ep_info.c
index f6b26be..97e1b87 100644
--- a/src/arm/ep_info.c
+++ b/src/arm/ep_info.c
@@ -8,17 +8,6 @@
 #include <stddef.h>
 #include <transfer_list.h>
 
-/**
- * Set handoff arguments in the entry point info structure.
- *
- * This function populates the provided entry point info structure with data
- * from the transfer list.
- *
- * @param[in] tl        Pointer to the transfer list.
- * @param[out] ep_info  Pointer to the entry point info structure to populate.
- *
- * @return Pointer to the populated entry point info structure.
- */
 struct entry_point_info *
 transfer_list_set_handoff_args(struct transfer_list_header *tl,
 			       struct entry_point_info *ep_info)
diff --git a/src/generic/transfer_list.c b/src/generic/transfer_list.c
index 1af7ed7..c6bcc77 100644
--- a/src/generic/transfer_list.c
+++ b/src/generic/transfer_list.c
@@ -52,11 +52,6 @@
 	}
 }
 
-/*******************************************************************************
- * Creating a transfer list in a reserved memory region specified
- * Compliant to 2.4.5 of Firmware handoff specification (v0.9)
- * Return pointer to the created transfer list or NULL on error
- ******************************************************************************/
 struct transfer_list_header *transfer_list_init(void *addr, size_t max_size)
 {
 	struct transfer_list_header *tl = addr;
@@ -86,11 +81,6 @@
 	return tl;
 }
 
-/*******************************************************************************
- * Relocating a transfer list to a reserved memory region specified
- * Compliant to 2.4.6 of Firmware handoff specification (v0.9)
- * Return pointer to the relocated transfer list or NULL on error
- ******************************************************************************/
 struct transfer_list_header *
 transfer_list_relocate(struct transfer_list_header *tl, void *addr,
 		       size_t max_size)
@@ -127,11 +117,6 @@
 	return new_tl;
 }
 
-/*******************************************************************************
- * Verifying the header of a transfer list
- * Compliant to 2.4.1 of Firmware handoff specification (v0.9)
- * Return transfer list operation status code
- ******************************************************************************/
 enum transfer_list_ops
 transfer_list_check_header(const struct transfer_list_header *tl)
 {
@@ -181,10 +166,6 @@
 	return TL_OPS_CUS;
 }
 
-/*******************************************************************************
- * Enumerate the next transfer entry
- * Return pointer to the next transfer entry or NULL on error
- ******************************************************************************/
 struct transfer_list_entry *transfer_list_next(struct transfer_list_header *tl,
 					       struct transfer_list_entry *last)
 {
@@ -265,10 +246,6 @@
 	return cs;
 }
 
-/*******************************************************************************
- * Update the checksum of a transfer list
- * Return updated checksum of the transfer list
- ******************************************************************************/
 void transfer_list_update_checksum(struct transfer_list_header *tl)
 {
 	uint8_t cs;
@@ -284,10 +261,6 @@
 	assert(transfer_list_verify_checksum(tl));
 }
 
-/*******************************************************************************
- * Verify the checksum of a transfer list
- * Return true if verified or false if not
- ******************************************************************************/
 bool transfer_list_verify_checksum(const struct transfer_list_header *tl)
 {
 	if (!tl) {
@@ -301,10 +274,6 @@
 	return !calc_byte_sum(tl);
 }
 
-/*******************************************************************************
- * Update the data size of a transfer entry
- * Return true on success or false on error
- ******************************************************************************/
 bool transfer_list_set_data_size(struct transfer_list_header *tl,
 				 struct transfer_list_entry *te,
 				 uint32_t new_data_size)
@@ -392,10 +361,6 @@
 	return true;
 }
 
-/*******************************************************************************
- * Remove a specified transfer entry from a transfer list
- * Return true on success or false on error
- ******************************************************************************/
 bool transfer_list_rem(struct transfer_list_header *tl,
 		       struct transfer_list_entry *te)
 {
@@ -426,11 +391,6 @@
 	return true;
 }
 
-/*******************************************************************************
- * Add a new transfer entry into a transfer list
- * Compliant to 2.4.3 of Firmware handoff specification (v0.9)
- * Return pointer to the added transfer entry or NULL on error
- ******************************************************************************/
 struct transfer_list_entry *transfer_list_add(struct transfer_list_header *tl,
 					      uint32_t tag_id,
 					      uint32_t data_size,
@@ -479,12 +439,6 @@
 	return te;
 }
 
-/*******************************************************************************
- * Add a new transfer entry into a transfer list with specified new data
- * alignment requirement
- * Compliant to 2.4.4 of Firmware handoff specification (v0.9)
- * Return pointer to the added transfer entry or NULL on error
- ******************************************************************************/
 struct transfer_list_entry *
 transfer_list_add_with_align(struct transfer_list_header *tl, uint32_t tag_id,
 			     uint32_t data_size, const void *data,
@@ -527,11 +481,6 @@
 	return te;
 }
 
-/*******************************************************************************
- * Search for an existing transfer entry with the specified tag id from a
- * transfer list
- * Return pointer to the found transfer entry or NULL on error
- ******************************************************************************/
 struct transfer_list_entry *transfer_list_find(struct transfer_list_header *tl,
 					       uint32_t tag_id)
 {
@@ -544,10 +493,6 @@
 	return te;
 }
 
-/*******************************************************************************
- * Retrieve the data pointer of a specified transfer entry
- * Return pointer to the transfer entry data or NULL on error
- ******************************************************************************/
 void *transfer_list_entry_data(struct transfer_list_entry *entry)
 {
 	if (!entry) {
@@ -556,12 +501,6 @@
 	return (uint8_t *)entry + entry->hdr_size;
 }
 
-/*******************************************************************************
- * Verifies that the transfer list has not already been initialized, then
- * initializes it at the specified memory location.
- *
- * Return pointer to the transfer list or NULL on error
- * *****************************************************************************/
 struct transfer_list_header *transfer_list_ensure(void *addr, size_t size)
 {
 	struct transfer_list_header *tl = NULL;
