]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Split out dbg_efi_opener() as a standalone function
authorMichael Brown <mcb30@ipxe.org>
Mon, 30 Nov 2020 16:34:32 +0000 (16:34 +0000)
committerMichael Brown <mcb30@ipxe.org>
Mon, 30 Nov 2020 16:36:08 +0000 (16:36 +0000)
Allow external code to dump the information for an opened protocol
information entry via DBG_EFI_OPENER() et al.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/include/ipxe/efi/efi.h
src/interface/efi/efi_debug.c

index 6d0c25674228f6fe244aa575586fcd3f9cdb9359..c8c069c123e26fcbd43007f00ba6dafe1bf494fc 100644 (file)
@@ -242,9 +242,19 @@ efi_devpath_text ( EFI_DEVICE_PATH_PROTOCOL *path );
 extern const __attribute__ (( pure )) char *
 efi_handle_name ( EFI_HANDLE handle );
 
+extern void dbg_efi_opener ( EFI_HANDLE handle, EFI_GUID *protocol,
+                            EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *opener );
 extern void dbg_efi_openers ( EFI_HANDLE handle, EFI_GUID *protocol );
 extern void dbg_efi_protocols ( EFI_HANDLE handle );
 
+#define DBG_EFI_OPENER_IF( level, handle, protocol,            \
+                          opener ) do {                        \
+               if ( DBG_ ## level ) {                          \
+                       dbg_efi_opener ( handle, protocol,      \
+                                        opener );              \
+               }                                               \
+       } while ( 0 )
+
 #define DBG_EFI_OPENERS_IF( level, handle, protocol ) do {     \
                if ( DBG_ ## level ) {                          \
                        dbg_efi_openers ( handle, protocol );   \
@@ -257,6 +267,12 @@ extern void dbg_efi_protocols ( EFI_HANDLE handle );
                }                                               \
        } while ( 0 )
 
+#define DBGC_EFI_OPENER_IF( level, id, ... ) do {              \
+               DBG_AC_IF ( level, id );                        \
+               DBG_EFI_OPENER_IF ( level, __VA_ARGS__ );       \
+               DBG_DC_IF ( level );                            \
+       } while ( 0 )
+
 #define DBGC_EFI_OPENERS_IF( level, id, ... ) do {             \
                DBG_AC_IF ( level, id );                        \
                DBG_EFI_OPENERS_IF ( level, __VA_ARGS__ );      \
@@ -269,16 +285,22 @@ extern void dbg_efi_protocols ( EFI_HANDLE handle );
                DBG_DC_IF ( level );                            \
        } while ( 0 )
 
+#define DBGC_EFI_OPENER( ... )                                 \
+       DBGC_EFI_OPENER_IF ( LOG, ##__VA_ARGS__ )
 #define DBGC_EFI_OPENERS( ... )                                        \
        DBGC_EFI_OPENERS_IF ( LOG, ##__VA_ARGS__ )
 #define DBGC_EFI_PROTOCOLS( ... )                              \
        DBGC_EFI_PROTOCOLS_IF ( LOG, ##__VA_ARGS__ )
 
+#define DBGC2_EFI_OPENER( ... )                                        \
+       DBGC_EFI_OPENER_IF ( EXTRA, ##__VA_ARGS__ )
 #define DBGC2_EFI_OPENERS( ... )                               \
        DBGC_EFI_OPENERS_IF ( EXTRA, ##__VA_ARGS__ )
 #define DBGC2_EFI_PROTOCOLS( ... )                             \
        DBGC_EFI_PROTOCOLS_IF ( EXTRA, ##__VA_ARGS__ )
 
+#define DBGCP_EFI_OPENER( ... )                                        \
+       DBGC_EFI_OPENER_IF ( PROFILE, ##__VA_ARGS__ )
 #define DBGCP_EFI_OPENERS( ... )                               \
        DBGC_EFI_OPENERS_IF ( PROFILE, ##__VA_ARGS__ )
 #define DBGCP_EFI_PROTOCOLS( ... )                             \
index 7cff14614a1521ae389589cedd64ea0d27b41b79..6515b92c893ac4c7135c4005cab5b15e725db3a6 100644 (file)
@@ -262,6 +262,28 @@ efi_open_attributes_name ( unsigned int attributes ) {
        return name;
 }
 
+/**
+ * Print opened protocol information
+ *
+ * @v handle           EFI handle
+ * @V protocol         Protocol GUID
+ * @v opener           Opened protocol information
+ */
+void dbg_efi_opener ( EFI_HANDLE handle, EFI_GUID *protocol,
+                     EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *opener ) {
+
+       printf ( "HANDLE %s %s opened %dx (%s)", efi_handle_name ( handle ),
+                efi_guid_ntoa ( protocol ), opener->OpenCount,
+                efi_open_attributes_name ( opener->Attributes ) );
+       printf ( " by %s", efi_handle_name ( opener->AgentHandle ) );
+       if ( opener->ControllerHandle == handle ) {
+               printf ( "\n" );
+       } else {
+               printf ( " for %s\n",
+                        efi_handle_name ( opener->ControllerHandle ) );
+       }
+}
+
 /**
  * Print list of openers of a given protocol on a given handle
  *
@@ -271,7 +293,6 @@ efi_open_attributes_name ( unsigned int attributes ) {
 void dbg_efi_openers ( EFI_HANDLE handle, EFI_GUID *protocol ) {
        EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
        EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *openers;
-       EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *opener;
        UINTN count;
        unsigned int i;
        EFI_STATUS efirc;
@@ -296,20 +317,8 @@ void dbg_efi_openers ( EFI_HANDLE handle, EFI_GUID *protocol ) {
        }
 
        /* Dump list of openers */
-       for ( i = 0 ; i < count ; i++ ) {
-               opener = &openers[i];
-               printf ( "HANDLE %s %s opened %dx (%s)",
-                        efi_handle_name ( handle ),
-                        efi_guid_ntoa ( protocol ), opener->OpenCount,
-                        efi_open_attributes_name ( opener->Attributes ) );
-               printf ( " by %s", efi_handle_name ( opener->AgentHandle ) );
-               if ( opener->ControllerHandle == handle ) {
-                       printf ( "\n" );
-               } else {
-                       printf ( " for %s\n",
-                                efi_handle_name ( opener->ControllerHandle ) );
-               }
-       }
+       for ( i = 0 ; i < count ; i++ )
+               dbg_efi_opener ( handle, protocol, &openers[i] );
 
        /* Free list */
        bs->FreePool ( openers );