efi_loader: check parameters of CreateEvent
[oweals/u-boot.git] / lib / efi_loader / efi_boottime.c
index b7ab2e8208e6783bd511a94c80c073bb21732f34..86cb9ba479a585c27af948e15cc08b480f751fe8 100644 (file)
@@ -43,7 +43,7 @@ static bool efi_is_direct_boot = true;
  * In most cases we want to pass an FDT to the payload, so reserve one slot of
  * config table space for it. The pointer gets populated by do_bootefi_exec().
  */
-static struct efi_configuration_table __efi_runtime_data efi_conf_table[2];
+static struct efi_configuration_table __efi_runtime_data efi_conf_table[16];
 
 #ifdef CONFIG_ARM
 /*
@@ -115,9 +115,9 @@ void efi_save_gd(void)
 }
 
 /*
- * Special case handler for error/abort that just forces things back
- * to u-boot world so we can dump out an abort msg, without any care
- * about returning back to UEFI world.
+ * Special case handler for error/abort that just forces things back to u-boot
+ * world so we can dump out an abort msg, without any care about returning back
+ * to UEFI world.
  */
 void efi_restore_gd(void)
 {
@@ -130,14 +130,14 @@ void efi_restore_gd(void)
 }
 
 /**
- * indent_string - returns a string for indenting with two spaces per level
+ * indent_string() - returns a string for indenting with two spaces per level
+ * @level: indent level
  *
  * A maximum of ten indent levels is supported. Higher indent levels will be
  * truncated.
  *
- * @level:             indent level
- * Return Value:       A string for indenting with two spaces per level is
- *                     returned.
+ * Return: A string for indenting with two spaces per level is
+ *         returned.
  */
 static const char *indent_string(int level)
 {
@@ -164,18 +164,18 @@ const char *__efi_nesting_dec(void)
 }
 
 /**
- * efi_queue_event - queue an EFI event
+ * efi_queue_event() - queue an EFI event
+ * @event:     event to signal
+ * @check_tpl: check the TPL level
  *
  * This function queues the notification function of the event for future
  * execution.
  *
- * The notification function is called if the task priority level of the
- * event is higher than the current task priority level.
+ * The notification function is called if the task priority level of the event
+ * is higher than the current task priority level.
  *
  * For the SignalEvent service see efi_signal_event_ext.
  *
- * @event:     event to signal
- * @check_tpl: check the TPL level
  */
 static void efi_queue_event(struct efi_event *event, bool check_tpl)
 {
@@ -191,16 +191,34 @@ static void efi_queue_event(struct efi_event *event, bool check_tpl)
 }
 
 /**
- * efi_signal_event - signal an EFI event
+ * is_valid_tpl() - check if the task priority level is valid
  *
- * This function signals an event. If the event belongs to an event group
- * all events of the group are signaled. If they are of type EVT_NOTIFY_SIGNAL
+ * @tpl:               TPL level to check
+ * ReturnValue:                status code
+ */
+efi_status_t is_valid_tpl(efi_uintn_t tpl)
+{
+       switch (tpl) {
+       case TPL_APPLICATION:
+       case TPL_CALLBACK:
+       case TPL_NOTIFY:
+       case TPL_HIGH_LEVEL:
+               return EFI_SUCCESS;
+       default:
+               return EFI_INVALID_PARAMETER;
+       }
+}
+
+/**
+ * efi_signal_event() - signal an EFI event
+ * @event:     event to signal
+ * @check_tpl: check the TPL level
+ *
+ * This function signals an event. If the event belongs to an event group all
+ * events of the group are signaled. If they are of type EVT_NOTIFY_SIGNAL
  * their notification function is queued.
  *
  * For the SignalEvent service see efi_signal_event_ext.
- *
- * @event:     event to signal
- * @check_tpl: check the TPL level
  */
 void efi_signal_event(struct efi_event *event, bool check_tpl)
 {
@@ -235,14 +253,15 @@ void efi_signal_event(struct efi_event *event, bool check_tpl)
 }
 
 /**
- * efi_raise_tpl - raise the task priority level
+ * efi_raise_tpl() - raise the task priority level
+ * @new_tpl: new value of the task priority level
  *
  * This function implements the RaiseTpl service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @new_tpl:           new value of the task priority level
- * Return Value:       old value of the task priority level
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: old value of the task priority level
  */
 static unsigned long EFIAPI efi_raise_tpl(efi_uintn_t new_tpl)
 {
@@ -261,13 +280,13 @@ static unsigned long EFIAPI efi_raise_tpl(efi_uintn_t new_tpl)
 }
 
 /**
- * efi_restore_tpl - lower the task priority level
+ * efi_restore_tpl() - lower the task priority level
+ * @old_tpl: value of the task priority level to be restored
  *
  * This function implements the RestoreTpl service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @old_tpl:   value of the task priority level to be restored
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  */
 static void EFIAPI efi_restore_tpl(efi_uintn_t old_tpl)
 {
@@ -288,17 +307,18 @@ static void EFIAPI efi_restore_tpl(efi_uintn_t old_tpl)
 }
 
 /**
- * efi_allocate_pages_ext - allocate memory pages
+ * efi_allocate_pages_ext() - allocate memory pages
+ * @type:        type of allocation to be performed
+ * @memory_type: usage type of the allocated memory
+ * @pages:       number of pages to be allocated
+ * @memory:      allocated memory
  *
  * This function implements the AllocatePages service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @type:              type of allocation to be performed
- * @memory_type:       usage type of the allocated memory
- * @pages:             number of pages to be allocated
- * @memory:            allocated memory
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_allocate_pages_ext(int type, int memory_type,
                                                  efi_uintn_t pages,
@@ -312,15 +332,16 @@ static efi_status_t EFIAPI efi_allocate_pages_ext(int type, int memory_type,
 }
 
 /**
- * efi_free_pages_ext - Free memory pages.
+ * efi_free_pages_ext() - Free memory pages.
+ * @memory: start of the memory area to be freed
+ * @pages:  number of pages to be freed
  *
  * This function implements the FreePages service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @memory:            start of the memory area to be freed
- * @pages:             number of pages to be freed
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_free_pages_ext(uint64_t memory,
                                              efi_uintn_t pages)
@@ -333,19 +354,20 @@ static efi_status_t EFIAPI efi_free_pages_ext(uint64_t memory,
 }
 
 /**
- * efi_get_memory_map_ext - get map describing memory usage
+ * efi_get_memory_map_ext() - get map describing memory usage
+ * @memory_map_size:    on entry the size, in bytes, of the memory map buffer,
+ *                      on exit the size of the copied memory map
+ * @memory_map:         buffer to which the memory map is written
+ * @map_key:            key for the memory map
+ * @descriptor_size:    size of an individual memory descriptor
+ * @descriptor_version: version number of the memory descriptor structure
  *
  * This function implements the GetMemoryMap service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @memory_map_size:   on entry the size, in bytes, of the memory map buffer,
- *                     on exit the size of the copied memory map
- * @memory_map:                buffer to which the memory map is written
- * @map_key:           key for the memory map
- * @descriptor_size:   size of an individual memory descriptor
- * @descriptor_version:        version number of the memory descriptor structure
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_get_memory_map_ext(
                                        efi_uintn_t *memory_map_size,
@@ -364,16 +386,17 @@ static efi_status_t EFIAPI efi_get_memory_map_ext(
 }
 
 /**
- * efi_allocate_pool_ext - allocate memory from pool
+ * efi_allocate_pool_ext() - allocate memory from pool
+ * @pool_type: type of the pool from which memory is to be allocated
+ * @size:      number of bytes to be allocated
+ * @buffer:    allocated memory
  *
  * This function implements the AllocatePool service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @pool_type:         type of the pool from which memory is to be allocated
- * @size:              number of bytes to be allocated
- * @buffer:            allocated memory
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_allocate_pool_ext(int pool_type,
                                                 efi_uintn_t size,
@@ -387,14 +410,15 @@ static efi_status_t EFIAPI efi_allocate_pool_ext(int pool_type,
 }
 
 /**
- * efi_free_pool_ext - free memory from pool
+ * efi_free_pool_ext() - free memory from pool
+ * @buffer: start of memory to be freed
  *
  * This function implements the FreePool service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @buffer:            start of memory to be freed
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_free_pool_ext(void *buffer)
 {
@@ -406,12 +430,10 @@ static efi_status_t EFIAPI efi_free_pool_ext(void *buffer)
 }
 
 /**
- * efi_add_handle - add a new object to the object list
- *
- * The protocols list is initialized.
- * The object handle is set.
+ * efi_add_handle() - add a new object to the object list
+ * @obj: object to be added
  *
- * @obj:       object to be added
+ * The protocols list is initialized. The object handle is set.
  */
 void efi_add_handle(struct efi_object *obj)
 {
@@ -423,33 +445,32 @@ void efi_add_handle(struct efi_object *obj)
 }
 
 /**
- * efi_create_handle - create handle
+ * efi_create_handle() - create handle
+ * @handle: new handle
  *
- * @handle:            new handle
- * Return Value:       status code
+ * Return: status code
  */
 efi_status_t efi_create_handle(efi_handle_t *handle)
 {
        struct efi_object *obj;
-       efi_status_t r;
 
-       r = efi_allocate_pool(EFI_ALLOCATE_ANY_PAGES,
-                             sizeof(struct efi_object),
-                             (void **)&obj);
-       if (r != EFI_SUCCESS)
-               return r;
+       obj = calloc(1, sizeof(struct efi_object));
+       if (!obj)
+               return EFI_OUT_OF_RESOURCES;
+
        efi_add_handle(obj);
        *handle = obj->handle;
-       return r;
+
+       return EFI_SUCCESS;
 }
 
 /**
- * efi_search_protocol - find a protocol on a handle.
+ * efi_search_protocol() - find a protocol on a handle.
+ * @handle:        handle
+ * @protocol_guid: GUID of the protocol
+ * @handler:       reference to the protocol
  *
- * @handle:            handle
- * @protocol_guid:     GUID of the protocol
- * @handler:           reference to the protocol
- * Return Value:       status code
+ * Return: status code
  */
 efi_status_t efi_search_protocol(const efi_handle_t handle,
                                 const efi_guid_t *protocol_guid,
@@ -477,12 +498,12 @@ efi_status_t efi_search_protocol(const efi_handle_t handle,
 }
 
 /**
- * efi_remove_protocol - delete protocol from a handle
+ * efi_remove_protocol() - delete protocol from a handle
+ * @handle:             handle from which the protocol shall be deleted
+ * @protocol:           GUID of the protocol to be deleted
+ * @protocol_interface: interface of the protocol implementation
  *
- * @handle:                    handle from which the protocol shall be deleted
- * @protocol:                  GUID of the protocol to be deleted
- * @protocol_interface:                interface of the protocol implementation
- * Return Value:               status code
+ * Return: status code
  */
 efi_status_t efi_remove_protocol(const efi_handle_t handle,
                                 const efi_guid_t *protocol,
@@ -504,10 +525,10 @@ efi_status_t efi_remove_protocol(const efi_handle_t handle,
 }
 
 /**
- * efi_remove_all_protocols - delete all protocols from a handle
+ * efi_remove_all_protocols() - delete all protocols from a handle
+ * @handle: handle from which the protocols shall be deleted
  *
- * @handle:            handle from which the protocols shall be deleted
- * Return Value:       status code
+ * Return: status code
  */
 efi_status_t efi_remove_all_protocols(const efi_handle_t handle)
 {
@@ -530,9 +551,9 @@ efi_status_t efi_remove_all_protocols(const efi_handle_t handle)
 }
 
 /**
- * efi_delete_handle - delete handle
+ * efi_delete_handle() - delete handle
  *
- * @obj:       handle to delete
+ * @obj: handle to delete
  */
 void efi_delete_handle(struct efi_object *obj)
 {
@@ -544,10 +565,10 @@ void efi_delete_handle(struct efi_object *obj)
 }
 
 /**
- * efi_is_event - check if a pointer is a valid event
+ * efi_is_event() - check if a pointer is a valid event
+ * @event: pointer to check
  *
- * @event:             pointer to check
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t efi_is_event(const struct efi_event *event)
 {
@@ -563,20 +584,20 @@ static efi_status_t efi_is_event(const struct efi_event *event)
 }
 
 /**
- * efi_create_event - create an event
+ * efi_create_event() - create an event
+ * @type:            type of the event to create
+ * @notify_tpl:      task priority level of the event
+ * @notify_function: notification function of the event
+ * @notify_context:  pointer passed to the notification function
+ * @group:           event group
+ * @event:           created event
  *
  * This function is used inside U-Boot code to create an event.
  *
  * For the API function implementing the CreateEvent service see
  * efi_create_event_ext.
  *
- * @type:              type of the event to create
- * @notify_tpl:                task priority level of the event
- * @notify_function:   notification function of the event
- * @notify_context:    pointer passed to the notification function
- * @group:             event group
- * @event:             created event
- * Return Value:       status code
+ * Return: status code
  */
 efi_status_t efi_create_event(uint32_t type, efi_uintn_t notify_tpl,
                              void (EFIAPI *notify_function) (
@@ -590,11 +611,21 @@ efi_status_t efi_create_event(uint32_t type, efi_uintn_t notify_tpl,
        if (event == NULL)
                return EFI_INVALID_PARAMETER;
 
-       if ((type & EVT_NOTIFY_SIGNAL) && (type & EVT_NOTIFY_WAIT))
+       switch (type) {
+       case 0:
+       case EVT_TIMER:
+       case EVT_NOTIFY_SIGNAL:
+       case EVT_TIMER | EVT_NOTIFY_SIGNAL:
+       case EVT_NOTIFY_WAIT:
+       case EVT_TIMER | EVT_NOTIFY_WAIT:
+       case EVT_SIGNAL_EXIT_BOOT_SERVICES:
+       case EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE:
+               break;
+       default:
                return EFI_INVALID_PARAMETER;
+       }
 
-       if ((type & (EVT_NOTIFY_SIGNAL | EVT_NOTIFY_WAIT)) &&
-           notify_function == NULL)
+       if (is_valid_tpl(notify_tpl) != EFI_SUCCESS)
                return EFI_INVALID_PARAMETER;
 
        evt = calloc(1, sizeof(struct efi_event));
@@ -615,19 +646,20 @@ efi_status_t efi_create_event(uint32_t type, efi_uintn_t notify_tpl,
 }
 
 /*
- * efi_create_event_ex - create an event in a group
+ * efi_create_event_ex() - create an event in a group
+ * @type:            type of the event to create
+ * @notify_tpl:      task priority level of the event
+ * @notify_function: notification function of the event
+ * @notify_context:  pointer passed to the notification function
+ * @event:           created event
+ * @event_group:     event group
  *
  * This function implements the CreateEventEx service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @type:              type of the event to create
- * @notify_tpl:                task priority level of the event
- * @notify_function:   notification function of the event
- * @notify_context:    pointer passed to the notification function
- * @event:             created event
- * @event_group:       event group
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 efi_status_t EFIAPI efi_create_event_ex(uint32_t type, efi_uintn_t notify_tpl,
                                        void (EFIAPI *notify_function) (
@@ -644,18 +676,19 @@ efi_status_t EFIAPI efi_create_event_ex(uint32_t type, efi_uintn_t notify_tpl,
 }
 
 /**
- * efi_create_event_ext - create an event
+ * efi_create_event_ext() - create an event
+ * @type:            type of the event to create
+ * @notify_tpl:      task priority level of the event
+ * @notify_function: notification function of the event
+ * @notify_context:  pointer passed to the notification function
+ * @event:           created event
  *
  * This function implements the CreateEvent service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @type:              type of the event to create
- * @notify_tpl:                task priority level of the event
- * @notify_function:   notification function of the event
- * @notify_context:    pointer passed to the notification function
- * @event:             created event
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_create_event_ext(
                        uint32_t type, efi_uintn_t notify_tpl,
@@ -671,7 +704,7 @@ static efi_status_t EFIAPI efi_create_event_ext(
 }
 
 /**
- * efi_timer_check - check if a timer event has occurred
+ * efi_timer_check() - check if a timer event has occurred
  *
  * Check if a timer event has occurred or a queued notification function should
  * be called.
@@ -706,15 +739,15 @@ void efi_timer_check(void)
 }
 
 /**
- * efi_set_timer - set the trigger time for a timer event or stop the event
+ * efi_set_timer() - set the trigger time for a timer event or stop the event
+ * @event:        event for which the timer is set
+ * @type:         type of the timer
+ * @trigger_time: trigger period in multiples of 100ns
  *
  * This is the function for internal usage in U-Boot. For the API function
  * implementing the SetTimer service see efi_set_timer_ext.
  *
- * @event:             event for which the timer is set
- * @type:              type of the timer
- * @trigger_time:      trigger period in multiples of 100ns
- * Return Value:               status code
+ * Return: status code
  */
 efi_status_t efi_set_timer(struct efi_event *event, enum efi_timer_delay type,
                           uint64_t trigger_time)
@@ -747,16 +780,19 @@ efi_status_t efi_set_timer(struct efi_event *event, enum efi_timer_delay type,
 }
 
 /**
- * efi_set_timer_ext - Set the trigger time for a timer event or stop the event
+ * efi_set_timer_ext() - Set the trigger time for a timer event or stop the
+ *                       event
+ * @event:        event for which the timer is set
+ * @type:         type of the timer
+ * @trigger_time: trigger period in multiples of 100ns
  *
  * This function implements the SetTimer service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @event:             event for which the timer is set
- * @type:              type of the timer
- * @trigger_time:      trigger period in multiples of 100ns
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_set_timer_ext(struct efi_event *event,
                                             enum efi_timer_delay type,
@@ -767,16 +803,17 @@ static efi_status_t EFIAPI efi_set_timer_ext(struct efi_event *event,
 }
 
 /**
- * efi_wait_for_event - wait for events to be signaled
+ * efi_wait_for_event() - wait for events to be signaled
+ * @num_events: number of events to be waited for
+ * @event:      events to be waited for
+ * @index:      index of the event that was signaled
  *
  * This function implements the WaitForEvent service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @num_events:                number of events to be waited for
- * @event:             events to be waited for
- * @index:             index of the event that was signaled
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_wait_for_event(efi_uintn_t num_events,
                                              struct efi_event **event,
@@ -824,17 +861,18 @@ out:
 }
 
 /**
- * efi_signal_event_ext - signal an EFI event
+ * efi_signal_event_ext() - signal an EFI event
+ * @event: event to signal
  *
  * This function implements the SignalEvent service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  *
  * This functions sets the signaled state of the event and queues the
  * notification function for execution.
  *
- * @event:             event to signal
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_signal_event_ext(struct efi_event *event)
 {
@@ -846,14 +884,15 @@ static efi_status_t EFIAPI efi_signal_event_ext(struct efi_event *event)
 }
 
 /**
- * efi_close_event - close an EFI event
+ * efi_close_event() - close an EFI event
+ * @event: event to close
  *
  * This function implements the CloseEvent service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @event:             event to close
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_close_event(struct efi_event *event)
 {
@@ -866,17 +905,18 @@ static efi_status_t EFIAPI efi_close_event(struct efi_event *event)
 }
 
 /**
- * efi_check_event - check if an event is signaled
+ * efi_check_event() - check if an event is signaled
+ * @event: event to check
  *
  * This function implements the CheckEvent service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * If an event is not signaled yet, the notification function is queued.
- * The signaled state is cleared.
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  *
- * @event:             event to check
- * Return Value:       status code
+ * If an event is not signaled yet, the notification function is queued. The
+ * signaled state is cleared.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_check_event(struct efi_event *event)
 {
@@ -895,10 +935,10 @@ static efi_status_t EFIAPI efi_check_event(struct efi_event *event)
 }
 
 /**
- * efi_search_obj - find the internal EFI object for a handle
+ * efi_search_obj() - find the internal EFI object for a handle
+ * @handle: handle to find
  *
- * @handle:            handle to find
- * Return Value:       EFI object
+ * Return: EFI object
  */
 struct efi_object *efi_search_obj(const efi_handle_t handle)
 {
@@ -913,11 +953,11 @@ struct efi_object *efi_search_obj(const efi_handle_t handle)
 }
 
 /**
- * efi_open_protocol_info_entry - create open protocol info entry and add it
- *                               to a protocol
+ * efi_open_protocol_info_entry() - create open protocol info entry and add it
+ *                                  to a protocol
+ * @handler: handler of a protocol
  *
- * @handler:           handler of a protocol
- * Return Value:       open protocol info entry
+ * Return: open protocol info entry
  */
 static struct efi_open_protocol_info_entry *efi_create_open_info(
                        struct efi_handler *handler)
@@ -934,10 +974,10 @@ static struct efi_open_protocol_info_entry *efi_create_open_info(
 }
 
 /**
- * efi_delete_open_info - remove an open protocol info entry from a protocol
+ * efi_delete_open_info() - remove an open protocol info entry from a protocol
+ * @item: open protocol info entry to delete
  *
- * @item:              open protocol info entry to delete
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t efi_delete_open_info(
                        struct efi_open_protocol_info_item *item)
@@ -948,12 +988,12 @@ static efi_status_t efi_delete_open_info(
 }
 
 /**
- * efi_add_protocol - install new protocol on a handle
+ * efi_add_protocol() - install new protocol on a handle
+ * @handle:             handle on which the protocol shall be installed
+ * @protocol:           GUID of the protocol to be installed
+ * @protocol_interface: interface of the protocol implementation
  *
- * @handle:                    handle on which the protocol shall be installed
- * @protocol:                  GUID of the protocol to be installed
- * @protocol_interface:                interface of the protocol implementation
- * Return Value:               status code
+ * Return: status code
  */
 efi_status_t efi_add_protocol(const efi_handle_t handle,
                              const efi_guid_t *protocol,
@@ -982,18 +1022,19 @@ efi_status_t efi_add_protocol(const efi_handle_t handle,
 }
 
 /**
- * efi_install_protocol_interface - install protocol interface
+ * efi_install_protocol_interface() - install protocol interface
+ * @handle:                  handle on which the protocol shall be installed
+ * @protocol:                GUID of the protocol to be installed
+ * @protocol_interface_type: type of the interface to be installed,
+ *                           always EFI_NATIVE_INTERFACE
+ * @protocol_interface:      interface of the protocol implementation
  *
  * This function implements the InstallProtocolInterface service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:                    handle on which the protocol shall be installed
- * @protocol:                  GUID of the protocol to be installed
- * @protocol_interface_type:   type of the interface to be installed,
- *                             always EFI_NATIVE_INTERFACE
- * @protocol_interface:                interface of the protocol implementation
- * Return Value:               status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_install_protocol_interface(
                        void **handle, const efi_guid_t *protocol,
@@ -1028,15 +1069,15 @@ out:
 }
 
 /**
- * efi_get_drivers - get all drivers associated to a controller
+ * efi_get_drivers() - get all drivers associated to a controller
+ * @efiobj:               handle of the controller
+ * @protocol:             protocol guid (optional)
+ * @number_of_drivers:    number of child controllers
+ * @driver_handle_buffer: handles of the the drivers
  *
  * The allocated buffer has to be freed with free().
  *
- * @efiobj:                    handle of the controller
- * @protocol:                  protocol guid (optional)
- * @number_of_drivers:         number of child controllers
- * @driver_handle_buffer:      handles of the the drivers
- * Return Value:               status code
+ * Return: status code
  */
 static efi_status_t efi_get_drivers(struct efi_object *efiobj,
                                    const efi_guid_t *protocol,
@@ -1093,16 +1134,17 @@ static efi_status_t efi_get_drivers(struct efi_object *efiobj,
 }
 
 /**
- * efi_disconnect_all_drivers - disconnect all drivers from a controller
+ * efi_disconnect_all_drivers() - disconnect all drivers from a controller
+ * @efiobj:       handle of the controller
+ * @protocol:     protocol guid (optional)
+ * @child_handle: handle of the child to destroy
  *
  * This function implements the DisconnectController service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @efiobj:            handle of the controller
- * @protocol:          protocol guid (optional)
- * @child_handle:      handle of the child to destroy
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t efi_disconnect_all_drivers(
                                struct efi_object *efiobj,
@@ -1132,16 +1174,17 @@ static efi_status_t efi_disconnect_all_drivers(
 }
 
 /**
- * efi_uninstall_protocol_interface - uninstall protocol interface
+ * efi_uninstall_protocol_interface() - uninstall protocol interface
+ * @handle:             handle from which the protocol shall be removed
+ * @protocol:           GUID of the protocol to be removed
+ * @protocol_interface: interface to be removed
  *
  * This function implements the UninstallProtocolInterface service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:                    handle from which the protocol shall be removed
- * @protocol:                  GUID of the protocol to be removed
- * @protocol_interface:                interface to be removed
- * Return Value:               status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_uninstall_protocol_interface(
                                efi_handle_t handle, const efi_guid_t *protocol,
@@ -1189,18 +1232,17 @@ out:
 }
 
 /**
- * efi_register_protocol_notify - register an event for notification when a
- *                               protocol is installed.
+ * efi_register_protocol_notify() - register an event for notification when a
+ *                                  protocol is installed.
+ * @protocol:     GUID of the protocol whose installation shall be notified
+ * @event:        event to be signaled upon installation of the protocol
+ * @registration: key for retrieving the registration information
  *
  * This function implements the RegisterProtocolNotify service.
  * See the Unified Extensible Firmware Interface (UEFI) specification
  * for details.
  *
- * @protocol:          GUID of the protocol whose installation shall be
- *                     notified
- * @event:             event to be signaled upon installation of the protocol
- * @registration:      key for retrieving the registration information
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_register_protocol_notify(
                                                const efi_guid_t *protocol,
@@ -1212,15 +1254,15 @@ static efi_status_t EFIAPI efi_register_protocol_notify(
 }
 
 /**
- * efi_search - determine if an EFI handle implements a protocol
+ * efi_search() - determine if an EFI handle implements a protocol
+ * @search_type: selection criterion
+ * @protocol:    GUID of the protocol
+ * @search_key:  registration key
+ * @efiobj:      handle
  *
  * See the documentation of the LocateHandle service in the UEFI specification.
  *
- * @search_type:       selection criterion
- * @protocol:          GUID of the protocol
- * @search_key:                registration key
- * @efiobj:            handle
- * Return Value:       0 if the handle implements the protocol
+ * Return: 0 if the handle implements the protocol
  */
 static int efi_search(enum efi_locate_search_type search_type,
                      const efi_guid_t *protocol, void *search_key,
@@ -1244,17 +1286,17 @@ static int efi_search(enum efi_locate_search_type search_type,
 }
 
 /**
- * efi_locate_handle - locate handles implementing a protocol
+ * efi_locate_handle() - locate handles implementing a protocol
+ * @search_type: selection criterion
+ * @protocol:    GUID of the protocol
+ * @search_key: registration key
+ * @buffer_size: size of the buffer to receive the handles in bytes
+ * @buffer:      buffer to receive the relevant handles
  *
  * This function is meant for U-Boot internal calls. For the API implementation
  * of the LocateHandle service see efi_locate_handle_ext.
  *
- * @search_type:       selection criterion
- * @protocol:          GUID of the protocol
- * @search_key:                registration key
- * @buffer_size:       size of the buffer to receive the handles in bytes
- * @buffer:            buffer to receive the relevant handles
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t efi_locate_handle(
                        enum efi_locate_search_type search_type,
@@ -1314,18 +1356,19 @@ static efi_status_t efi_locate_handle(
 }
 
 /**
- * efi_locate_handle_ext - locate handles implementing a protocol.
+ * efi_locate_handle_ext() - locate handles implementing a protocol.
+ * @search_type: selection criterion
+ * @protocol:    GUID of the protocol
+ * @search_key:  registration key
+ * @buffer_size: size of the buffer to receive the handles in bytes
+ * @buffer:      buffer to receive the relevant handles
  *
  * This function implements the LocateHandle service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @search_type:       selection criterion
- * @protocol:          GUID of the protocol
- * @search_key:                registration key
- * @buffer_size:       size of the buffer to receive the handles in bytes
- * @buffer:            buffer to receive the relevant handles
- * Return Value:       0 if the handle implements the protocol
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: 0 if the handle implements the protocol
  */
 static efi_status_t EFIAPI efi_locate_handle_ext(
                        enum efi_locate_search_type search_type,
@@ -1340,10 +1383,10 @@ static efi_status_t EFIAPI efi_locate_handle_ext(
 }
 
 /**
- * efi_remove_configuration_table - collapses configuration table entries,
- *                                 removing index i
+ * efi_remove_configuration_table() - collapses configuration table entries,
+ *                                    removing index i
  *
- * @i: index of the table entry to be removed
+ * @i: index of the table entry to be removed
  */
 static void efi_remove_configuration_table(int i)
 {
@@ -1356,15 +1399,15 @@ static void efi_remove_configuration_table(int i)
 }
 
 /**
- * efi_install_configuration_table - adds, updates, or removes a configuration
- *                                  table
+ * efi_install_configuration_table() - adds, updates, or removes a
+ *                                     configuration table
+ * @guid:  GUID of the installed table
+ * @table: table to be installed
  *
  * This function is used for internal calls. For the API implementation of the
  * InstallConfigurationTable service see efi_install_configuration_table_ext.
  *
- * @guid:              GUID of the installed table
- * @table:             table to be installed
- * Return Value:       status code
+ * Return: status code
  */
 efi_status_t efi_install_configuration_table(const efi_guid_t *guid,
                                             void *table)
@@ -1411,16 +1454,17 @@ out:
 }
 
 /**
- * efi_install_configuration_table_ex - Adds, updates, or removes a
- *                                     configuration table.
+ * efi_install_configuration_table_ex() - Adds, updates, or removes a
+ *                                        configuration table.
+ * @guid:  GUID of the installed table
+ * @table: table to be installed
  *
  * This function implements the InstallConfigurationTable service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @guid:              GUID of the installed table
- * @table:             table to be installed
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_install_configuration_table_ext(efi_guid_t *guid,
                                                               void *table)
@@ -1430,17 +1474,16 @@ static efi_status_t EFIAPI efi_install_configuration_table_ext(efi_guid_t *guid,
 }
 
 /**
- * efi_setup_loaded_image - initialize a loaded image
+ * efi_setup_loaded_image() - initialize a loaded image
+ * @info:        loaded image info to be passed to the entry point of the image
+ * @obj:         internal object associated with the loaded image
+ * @device_path: device path of the loaded image
+ * @file_path:   file path of the loaded image
  *
  * Initialize a loaded_image_info and loaded_image_info object with correct
  * protocols, boot-device, etc.
  *
- * @info:              loaded image info to be passed to the entry point of the
- *                     image
- * @obj:               internal object associated with the loaded image
- * @device_path:       device path of the loaded image
- * @file_path:         file path of the loaded image
- * Return Value:       status code
+ * Return: status code
  */
 efi_status_t efi_setup_loaded_image(
                        struct efi_loaded_image *info, struct efi_object *obj,
@@ -1495,11 +1538,11 @@ failure:
 }
 
 /**
- * efi_load_image_from_path - load an image using a file path
+ * efi_load_image_from_path() - load an image using a file path
+ * @file_path: the path of the image to load
+ * @buffer:    buffer containing the loaded image
  *
- * @file_path:         the path of the image to load
- * @buffer:            buffer containing the loaded image
- * Return Value:       status code
+ * Return: status code
  */
 efi_status_t efi_load_image_from_path(struct efi_device_path *file_path,
                                      void **buffer)
@@ -1544,20 +1587,20 @@ error:
 }
 
 /**
- * efi_load_image - load an EFI image into memory
+ * efi_load_image() - load an EFI image into memory
+ * @boot_policy:   true for request originating from the boot manager
+ * @parent_image:  the caller's image handle
+ * @file_path:     the path of the image to load
+ * @source_buffer: memory location from which the image is installed
+ * @source_size:   size of the memory area from which the image is installed
+ * @image_handle:  handle for the newly installed image
  *
  * This function implements the LoadImage service.
+ *
  * See the Unified Extensible Firmware Interface (UEFI) specification
  * for details.
  *
- * @boot_policy:       true for request originating from the boot manager
- * @parent_image:      the caller's image handle
- * @file_path:         the path of the image to load
- * @source_buffer:     memory location from which the image is installed
- * @source_size:       size of the memory area from which the image is
- *                     installed
- * @image_handle:      handle for the newly installed image
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_load_image(bool boot_policy,
                                          efi_handle_t parent_image,
@@ -1634,16 +1677,17 @@ error:
 }
 
 /**
- * efi_start_image - dall the entry point of an image
+ * efi_start_image() - dall the entry point of an image
+ * @image_handle:   handle of the image
+ * @exit_data_size: size of the buffer
+ * @exit_data:      buffer to receive the exit data of the called image
  *
  * This function implements the StartImage service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @image_handle:      handle of the image
- * @exit_data_size:    size of the buffer
- * @exit_data:         buffer to receive the exit data of the called image
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
                                           unsigned long *exit_data_size,
@@ -1700,17 +1744,18 @@ static efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
 }
 
 /**
- * efi_exit - leave an EFI application or driver
+ * efi_exit() - leave an EFI application or driver
+ * @image_handle:   handle of the application or driver that is exiting
+ * @exit_status:    status code
+ * @exit_data_size: size of the buffer in bytes
+ * @exit_data:      buffer with data describing an error
  *
  * This function implements the Exit service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @image_handle:      handle of the application or driver that is exiting
- * @exit_status:       status code
- * @exit_data_size:    size of the buffer in bytes
- * @exit_data:         buffer with data describing an error
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
                                    efi_status_t exit_status,
@@ -1749,14 +1794,15 @@ static efi_status_t EFIAPI efi_exit(efi_handle_t image_handle,
 }
 
 /**
- * efi_unload_image - unload an EFI image
+ * efi_unload_image() - unload an EFI image
+ * @image_handle: handle of the image to be unloaded
  *
  * This function implements the UnloadImage service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @image_handle:      handle of the image to be unloaded
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_unload_image(efi_handle_t image_handle)
 {
@@ -1771,7 +1817,7 @@ static efi_status_t EFIAPI efi_unload_image(efi_handle_t image_handle)
 }
 
 /**
- * efi_exit_caches - fix up caches for EFI payloads if necessary
+ * efi_exit_caches() - fix up caches for EFI payloads if necessary
  */
 static void efi_exit_caches(void)
 {
@@ -1786,19 +1832,20 @@ static void efi_exit_caches(void)
 }
 
 /**
- * efi_exit_boot_services - stop all boot services
+ * efi_exit_boot_services() - stop all boot services
+ * @image_handle: handle of the loaded image
+ * @map_key:      key of the memory map
  *
  * This function implements the ExitBootServices service.
+ *
  * See the Unified Extensible Firmware Interface (UEFI) specification
  * for details.
  *
- * All timer events are disabled.
- * For exit boot services events the notification function is called.
- * The boot services are disabled in the system table.
+ * All timer events are disabled. For exit boot services events the
+ * notification function is called. The boot services are disabled in the
+ * system table.
  *
- * @image_handle:      handle of the loaded image
- * @map_key:           key of the memory map
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
                                                  unsigned long map_key)
@@ -1861,14 +1908,15 @@ static efi_status_t EFIAPI efi_exit_boot_services(efi_handle_t image_handle,
 }
 
 /**
- * efi_get_next_monotonic_count - get next value of the counter
+ * efi_get_next_monotonic_count() - get next value of the counter
+ * @count: returned value of the counter
  *
  * This function implements the NextMonotonicCount service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @count:             returned value of the counter
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_get_next_monotonic_count(uint64_t *count)
 {
@@ -1880,14 +1928,15 @@ static efi_status_t EFIAPI efi_get_next_monotonic_count(uint64_t *count)
 }
 
 /**
- * efi_stall - sleep
+ * efi_stall() - sleep
+ * @microseconds: period to sleep in microseconds
  *
- * This function implements the Stall sercive.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
+ * This function implements the Stall service.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  *
- * @microseconds:      period to sleep in microseconds
- * Return Value:       status code
+ * Return:  status code
  */
 static efi_status_t EFIAPI efi_stall(unsigned long microseconds)
 {
@@ -1897,17 +1946,18 @@ static efi_status_t EFIAPI efi_stall(unsigned long microseconds)
 }
 
 /**
- * efi_set_watchdog_timer - reset the watchdog timer
+ * efi_set_watchdog_timer() - reset the watchdog timer
+ * @timeout:       seconds before reset by watchdog
+ * @watchdog_code: code to be logged when resetting
+ * @data_size:     size of buffer in bytes
+ * @watchdog_data: buffer with data describing the reset reason
  *
  * This function implements the SetWatchdogTimer service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @timeout:           seconds before reset by watchdog
- * @watchdog_code:     code to be logged when resetting
- * @data_size:         size of buffer in bytes
- * @watchdog_data:     buffer with data describing the reset reason
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_set_watchdog_timer(unsigned long timeout,
                                                  uint64_t watchdog_code,
@@ -1920,17 +1970,18 @@ static efi_status_t EFIAPI efi_set_watchdog_timer(unsigned long timeout,
 }
 
 /**
- * efi_close_protocol - close a protocol
+ * efi_close_protocol() - close a protocol
+ * @handle:            handle on which the protocol shall be closed
+ * @protocol:          GUID of the protocol to close
+ * @agent_handle:      handle of the driver
+ * @controller_handle: handle of the controller
  *
  * This function implements the CloseProtocol service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:            handle on which the protocol shall be closed
- * @protocol:          GUID of the protocol to close
- * @agent_handle:      handle of the driver
- * @controller_handle: handle of the controller
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_close_protocol(efi_handle_t handle,
                                              const efi_guid_t *protocol,
@@ -1967,18 +2018,19 @@ out:
 }
 
 /**
- * efi_open_protocol_information - provide information about then open status
- *                                of a protocol on a handle
+ * efi_open_protocol_information() - provide information about then open status
+ *                                   of a protocol on a handle
+ * @handle:       handle for which the information shall be retrieved
+ * @protocol:     GUID of the protocol
+ * @entry_buffer: buffer to receive the open protocol information
+ * @entry_count:  number of entries available in the buffer
  *
  * This function implements the OpenProtocolInformation service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:            handle for which the information shall be retrieved
- * @protocol:          GUID of the protocol
- * @entry_buffer:      buffer to receive the open protocol information
- * @entry_count:       number of entries available in the buffer
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_open_protocol_information(
                        efi_handle_t handle, const efi_guid_t *protocol,
@@ -2031,16 +2083,17 @@ out:
 }
 
 /**
- * efi_protocols_per_handle - get protocols installed on a handle
+ * efi_protocols_per_handle() - get protocols installed on a handle
+ * @handle:                handle for which the information is retrieved
+ * @protocol_buffer:       buffer with protocol GUIDs
+ * @protocol_buffer_count: number of entries in the buffer
  *
  * This function implements the ProtocolsPerHandleService.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:                    handle for which the information is retrieved
- * @protocol_buffer:           buffer with protocol GUIDs
- * @protocol_buffer_count:     number of entries in the buffer
- * Return Value:               status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_protocols_per_handle(
                        efi_handle_t handle, efi_guid_t ***protocol_buffer,
@@ -2092,18 +2145,19 @@ static efi_status_t EFIAPI efi_protocols_per_handle(
 }
 
 /**
- * efi_locate_handle_buffer - locate handles implementing a protocol
+ * efi_locate_handle_buffer() - locate handles implementing a protocol
+ * @search_type: selection criterion
+ * @protocol:    GUID of the protocol
+ * @search_key:  registration key
+ * @no_handles:  number of returned handles
+ * @buffer:      buffer with the returned handles
  *
  * This function implements the LocateHandleBuffer service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @search_type:       selection criterion
- * @protocol:          GUID of the protocol
- * @search_key:                registration key
- * @no_handles:                number of returned handles
- * @buffer:            buffer with the returned handles
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_locate_handle_buffer(
                        enum efi_locate_search_type search_type,
@@ -2139,16 +2193,17 @@ out:
 }
 
 /**
- * efi_locate_protocol - find an interface implementing a protocol
+ * efi_locate_protocol() - find an interface implementing a protocol
+ * @protocol:           GUID of the protocol
+ * @registration:       registration key passed to the notification function
+ * @protocol_interface: interface implementing the protocol
  *
  * This function implements the LocateProtocol service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @protocol:          GUID of the protocol
- * @registration:      registration key passed to the notification function
- * @protocol_interface:        interface implementing the protocol
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_locate_protocol(const efi_guid_t *protocol,
                                               void *registration,
@@ -2180,17 +2235,18 @@ static efi_status_t EFIAPI efi_locate_protocol(const efi_guid_t *protocol,
 }
 
 /**
- * efi_locate_device_path - Get the device path and handle of an device
- *                         implementing a protocol
+ * efi_locate_device_path() - Get the device path and handle of an device
+ *                            implementing a protocol
+ * @protocol:    GUID of the protocol
+ * @device_path: device path
+ * @device:      handle of the device
  *
  * This function implements the LocateDevicePath service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @protocol:          GUID of the protocol
- * @device_path:       device path
- * @device:            handle of the device
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_locate_device_path(
                        const efi_guid_t *protocol,
@@ -2257,24 +2313,25 @@ out:
 }
 
 /**
- * Install multiple protocol interfaces.
+ * efi_install_multiple_protocol_interfaces() - Install multiple protocol
+ *                                              interfaces
+ * @handle: handle on which the protocol interfaces shall be installed
+ * @...:    NULL terminated argument list with pairs of protocol GUIDS and
+ *          interfaces
  *
  * This function implements the MultipleProtocolInterfaces service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:            handle on which the protocol interfaces shall be
- *                     installed
- * @...:               NULL terminated argument list with pairs of protocol
- *                     GUIDS and interfaces
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
                        void **handle, ...)
 {
        EFI_ENTRY("%p", handle);
 
-       va_list argptr;
+       efi_va_list argptr;
        const efi_guid_t *protocol;
        void *protocol_interface;
        efi_status_t r = EFI_SUCCESS;
@@ -2283,12 +2340,12 @@ static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
        if (!handle)
                return EFI_EXIT(EFI_INVALID_PARAMETER);
 
-       va_start(argptr, handle);
+       efi_va_start(argptr, handle);
        for (;;) {
-               protocol = va_arg(argptr, efi_guid_t*);
+               protocol = efi_va_arg(argptr, efi_guid_t*);
                if (!protocol)
                        break;
-               protocol_interface = va_arg(argptr, void*);
+               protocol_interface = efi_va_arg(argptr, void*);
                r = EFI_CALL(efi_install_protocol_interface(
                                                handle, protocol,
                                                EFI_NATIVE_INTERFACE,
@@ -2297,43 +2354,43 @@ static efi_status_t EFIAPI efi_install_multiple_protocol_interfaces(
                        break;
                i++;
        }
-       va_end(argptr);
+       efi_va_end(argptr);
        if (r == EFI_SUCCESS)
                return EFI_EXIT(r);
 
        /* If an error occurred undo all changes. */
-       va_start(argptr, handle);
+       efi_va_start(argptr, handle);
        for (; i; --i) {
-               protocol = va_arg(argptr, efi_guid_t*);
-               protocol_interface = va_arg(argptr, void*);
+               protocol = efi_va_arg(argptr, efi_guid_t*);
+               protocol_interface = efi_va_arg(argptr, void*);
                EFI_CALL(efi_uninstall_protocol_interface(handle, protocol,
                                                          protocol_interface));
        }
-       va_end(argptr);
+       efi_va_end(argptr);
 
        return EFI_EXIT(r);
 }
 
 /**
- * efi_uninstall_multiple_protocol_interfaces - uninstall multiple protocol
- *                                             interfaces
+ * efi_uninstall_multiple_protocol_interfaces() - uninstall multiple protocol
+ *                                                interfaces
+ * @handle: handle from which the protocol interfaces shall be removed
+ * @...:    NULL terminated argument list with pairs of protocol GUIDS and
+ *          interfaces
  *
  * This function implements the UninstallMultipleProtocolInterfaces service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:            handle from which the protocol interfaces shall be
- *                     removed
- * @...:               NULL terminated argument list with pairs of protocol
- *                     GUIDS and interfaces
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_uninstall_multiple_protocol_interfaces(
                        void *handle, ...)
 {
        EFI_ENTRY("%p", handle);
 
-       va_list argptr;
+       efi_va_list argptr;
        const efi_guid_t *protocol;
        void *protocol_interface;
        efi_status_t r = EFI_SUCCESS;
@@ -2342,12 +2399,12 @@ static efi_status_t EFIAPI efi_uninstall_multiple_protocol_interfaces(
        if (!handle)
                return EFI_EXIT(EFI_INVALID_PARAMETER);
 
-       va_start(argptr, handle);
+       efi_va_start(argptr, handle);
        for (;;) {
-               protocol = va_arg(argptr, efi_guid_t*);
+               protocol = efi_va_arg(argptr, efi_guid_t*);
                if (!protocol)
                        break;
-               protocol_interface = va_arg(argptr, void*);
+               protocol_interface = efi_va_arg(argptr, void*);
                r = EFI_CALL(efi_uninstall_protocol_interface(
                                                handle, protocol,
                                                protocol_interface));
@@ -2355,35 +2412,36 @@ static efi_status_t EFIAPI efi_uninstall_multiple_protocol_interfaces(
                        break;
                i++;
        }
-       va_end(argptr);
+       efi_va_end(argptr);
        if (r == EFI_SUCCESS)
                return EFI_EXIT(r);
 
        /* If an error occurred undo all changes. */
-       va_start(argptr, handle);
+       efi_va_start(argptr, handle);
        for (; i; --i) {
-               protocol = va_arg(argptr, efi_guid_t*);
-               protocol_interface = va_arg(argptr, void*);
+               protocol = efi_va_arg(argptr, efi_guid_t*);
+               protocol_interface = efi_va_arg(argptr, void*);
                EFI_CALL(efi_install_protocol_interface(&handle, protocol,
                                                        EFI_NATIVE_INTERFACE,
                                                        protocol_interface));
        }
-       va_end(argptr);
+       efi_va_end(argptr);
 
        return EFI_EXIT(r);
 }
 
 /**
- * efi_calculate_crc32 - calculate cyclic redundancy code
+ * efi_calculate_crc32() - calculate cyclic redundancy code
+ * @data:      buffer with data
+ * @data_size: size of buffer in bytes
+ * @crc32_p:   cyclic redundancy code
  *
  * This function implements the CalculateCrc32 service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @data:              buffer with data
- * @data_size:         size of buffer in bytes
- * @crc32_p:           cyclic redundancy code
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_calculate_crc32(void *data,
                                               unsigned long data_size,
@@ -2395,15 +2453,15 @@ static efi_status_t EFIAPI efi_calculate_crc32(void *data,
 }
 
 /**
- * efi_copy_mem - copy memory
+ * efi_copy_mem() - copy memory
+ * @destination: destination of the copy operation
+ * @source:      source of the copy operation
+ * @length:      number of bytes to copy
  *
  * This function implements the CopyMem service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @destination:       destination of the copy operation
- * @source:            source of the copy operation
- * @length:            number of bytes to copy
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  */
 static void EFIAPI efi_copy_mem(void *destination, const void *source,
                                size_t length)
@@ -2414,15 +2472,15 @@ static void EFIAPI efi_copy_mem(void *destination, const void *source,
 }
 
 /**
- * efi_set_mem - Fill memory with a byte value.
+ * efi_set_mem() - Fill memory with a byte value.
+ * @buffer: buffer to fill
+ * @size:   size of buffer in bytes
+ * @value:  byte to copy to the buffer
  *
  * This function implements the SetMem service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @buffer:            buffer to fill
- * @size:              size of buffer in bytes
- * @value:             byte to copy to the buffer
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  */
 static void EFIAPI efi_set_mem(void *buffer, size_t size, uint8_t value)
 {
@@ -2432,14 +2490,14 @@ static void EFIAPI efi_set_mem(void *buffer, size_t size, uint8_t value)
 }
 
 /**
- * efi_protocol_open - open protocol interface on a handle
+ * efi_protocol_open() - open protocol interface on a handle
+ * @handler:            handler of a protocol
+ * @protocol_interface: interface implementing the protocol
+ * @agent_handle:       handle of the driver
+ * @controller_handle:  handle of the controller
+ * @attributes:         attributes indicating how to open the protocol
  *
- * @handler:           handler of a protocol
- * @protocol_interface:        interface implementing the protocol
- * @agent_handle:      handle of the driver
- * @controller_handle: handle of the controller
- * @attributes:                attributes indicating how to open the protocol
- * Return Value:       status code
+ * Return: status code
  */
 static efi_status_t efi_protocol_open(
                        struct efi_handler *handler,
@@ -2527,19 +2585,20 @@ out:
 }
 
 /**
- * efi_open_protocol - open protocol interface on a handle
+ * efi_open_protocol() - open protocol interface on a handle
+ * @handle:             handle on which the protocol shall be opened
+ * @protocol:           GUID of the protocol
+ * @protocol_interface: interface implementing the protocol
+ * @agent_handle:       handle of the driver
+ * @controller_handle:  handle of the controller
+ * @attributes:         attributes indicating how to open the protocol
  *
  * This function implements the OpenProtocol interface.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:            handle on which the protocol shall be opened
- * @protocol:          GUID of the protocol
- * @protocol_interface:        interface implementing the protocol
- * @agent_handle:      handle of the driver
- * @controller_handle: handle of the controller
- * @attributes:                attributes indicating how to open the protocol
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_open_protocol(
                        void *handle, const efi_guid_t *protocol,
@@ -2594,16 +2653,17 @@ out:
 }
 
 /**
- * efi_handle_protocol - get interface of a protocol on a handle
+ * efi_handle_protocol() - get interface of a protocol on a handle
+ * @handle:             handle on which the protocol shall be opened
+ * @protocol:           GUID of the protocol
+ * @protocol_interface: interface implementing the protocol
  *
  * This function implements the HandleProtocol service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @handle:            handle on which the protocol shall be opened
- * @protocol:          GUID of the protocol
- * @protocol_interface:        interface implementing the protocol
- * Return Value:       status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_handle_protocol(efi_handle_t handle,
                                               const efi_guid_t *protocol,
@@ -2614,12 +2674,12 @@ static efi_status_t EFIAPI efi_handle_protocol(efi_handle_t handle,
 }
 
 /**
- * efi_bind_controller - bind a single driver to a controller
+ * efi_bind_controller() - bind a single driver to a controller
+ * @controller_handle:   controller handle
+ * @driver_image_handle: driver handle
+ * @remain_device_path:  remaining path
  *
- * @controller_handle:         controller handle
- * @driver_image_handle:       driver handle
- * @remain_device_path:                remaining path
- * Return Value:               status code
+ * Return: status code
  */
 static efi_status_t efi_bind_controller(
                        efi_handle_t controller_handle,
@@ -2650,12 +2710,12 @@ static efi_status_t efi_bind_controller(
 }
 
 /**
- * efi_connect_single_controller - connect a single driver to a controller
+ * efi_connect_single_controller() - connect a single driver to a controller
+ * @controller_handle:   controller
+ * @driver_image_handle: driver
+ * @remain_device_path:  remainting path
  *
- * @controller_handle:         controller
- * @driver_image_handle:       driver
- * @remain_device_path:                remainting path
- * Return Value:               status code
+ * Return: status code
  */
 static efi_status_t efi_connect_single_controller(
                        efi_handle_t controller_handle,
@@ -2722,21 +2782,22 @@ static efi_status_t efi_connect_single_controller(
 }
 
 /**
- * efi_connect_controller - connect a controller to a driver
+ * efi_connect_controller() - connect a controller to a driver
+ * @controller_handle:   handle of the controller
+ * @driver_image_handle: handle of the driver
+ * @remain_device_path:  device path of a child controller
+ * @recursive:           true to connect all child controllers
  *
  * This function implements the ConnectController service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  *
  * First all driver binding protocol handles are tried for binding drivers.
  * Afterwards all handles that have openened a protocol of the controller
  * with EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER are connected to drivers.
  *
- * @controller_handle:         handle of the controller
- * @driver_image_handle:       handle of the driver
- * @remain_device_path:                device path of a child controller
- * @recursive:                 true to connect all child controllers
- * Return Value:               status code
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_connect_controller(
                        efi_handle_t controller_handle,
@@ -2790,21 +2851,21 @@ out:
 }
 
 /**
- * efi_reinstall_protocol_interface - reinstall protocol interface
+ * efi_reinstall_protocol_interface() - reinstall protocol interface
+ * @handle:        handle on which the protocol shall be reinstalled
+ * @protocol:      GUID of the protocol to be installed
+ * @old_interface: interface to be removed
+ * @new_interface: interface to be installed
  *
  * This function implements the ReinstallProtocolInterface service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
+ *
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
  *
  * The old interface is uninstalled. The new interface is installed.
  * Drivers are connected.
  *
- * @handle:                    handle on which the protocol shall be
- *                             reinstalled
- * @protocol:                  GUID of the protocol to be installed
- * @old_interface:             interface to be removed
- * @new_interface:             interface to be installed
- * Return Value:               status code
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_reinstall_protocol_interface(
                        efi_handle_t handle, const efi_guid_t *protocol,
@@ -2833,15 +2894,15 @@ out:
 }
 
 /**
- * efi_get_child_controllers - get all child controllers associated to a driver
+ * efi_get_child_controllers() - get all child controllers associated to a driver
+ * @efiobj:              handle of the controller
+ * @driver_handle:       handle of the driver
+ * @number_of_children:  number of child controllers
+ * @child_handle_buffer: handles of the the child controllers
  *
  * The allocated buffer has to be freed with free().
  *
- * @efiobj:                    handle of the controller
- * @driver_handle:             handle of the driver
- * @number_of_children:                number of child controllers
- * @child_handle_buffer:       handles of the the child controllers
- * Return Value:               status code
+ * Return: status code
  */
 static efi_status_t efi_get_child_controllers(
                                struct efi_object *efiobj,
@@ -2897,16 +2958,17 @@ static efi_status_t efi_get_child_controllers(
 }
 
 /**
- * efi_disconnect_controller - disconnect a controller from a driver
+ * efi_disconnect_controller() - disconnect a controller from a driver
+ * @controller_handle:   handle of the controller
+ * @driver_image_handle: handle of the driver
+ * @child_handle:        handle of the child to destroy
  *
  * This function implements the DisconnectController service.
- * See the Unified Extensible Firmware Interface (UEFI) specification
- * for details.
  *
- * @controller_handle:         handle of the controller
- * @driver_image_handle:       handle of the driver
- * @child_handle:              handle of the child to destroy
- * Return Value:               status code
+ * See the Unified Extensible Firmware Interface (UEFI) specification for
+ * details.
+ *
+ * Return: status code
  */
 static efi_status_t EFIAPI efi_disconnect_controller(
                                efi_handle_t controller_handle,