mirror of
https://github.com/ipxe/ipxe
synced 2025-12-20 12:00:19 +03:00
[efi] Split out dbg_efi_opener() as a standalone function
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>
This commit is contained in:
@@ -242,9 +242,19 @@ efi_devpath_text ( EFI_DEVICE_PATH_PROTOCOL *path );
|
|||||||
extern const __attribute__ (( pure )) char *
|
extern const __attribute__ (( pure )) char *
|
||||||
efi_handle_name ( EFI_HANDLE handle );
|
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_openers ( EFI_HANDLE handle, EFI_GUID *protocol );
|
||||||
extern void dbg_efi_protocols ( EFI_HANDLE handle );
|
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 { \
|
#define DBG_EFI_OPENERS_IF( level, handle, protocol ) do { \
|
||||||
if ( DBG_ ## level ) { \
|
if ( DBG_ ## level ) { \
|
||||||
dbg_efi_openers ( handle, protocol ); \
|
dbg_efi_openers ( handle, protocol ); \
|
||||||
@@ -257,6 +267,12 @@ extern void dbg_efi_protocols ( EFI_HANDLE handle );
|
|||||||
} \
|
} \
|
||||||
} while ( 0 )
|
} 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 { \
|
#define DBGC_EFI_OPENERS_IF( level, id, ... ) do { \
|
||||||
DBG_AC_IF ( level, id ); \
|
DBG_AC_IF ( level, id ); \
|
||||||
DBG_EFI_OPENERS_IF ( level, __VA_ARGS__ ); \
|
DBG_EFI_OPENERS_IF ( level, __VA_ARGS__ ); \
|
||||||
@@ -269,16 +285,22 @@ extern void dbg_efi_protocols ( EFI_HANDLE handle );
|
|||||||
DBG_DC_IF ( level ); \
|
DBG_DC_IF ( level ); \
|
||||||
} while ( 0 )
|
} while ( 0 )
|
||||||
|
|
||||||
|
#define DBGC_EFI_OPENER( ... ) \
|
||||||
|
DBGC_EFI_OPENER_IF ( LOG, ##__VA_ARGS__ )
|
||||||
#define DBGC_EFI_OPENERS( ... ) \
|
#define DBGC_EFI_OPENERS( ... ) \
|
||||||
DBGC_EFI_OPENERS_IF ( LOG, ##__VA_ARGS__ )
|
DBGC_EFI_OPENERS_IF ( LOG, ##__VA_ARGS__ )
|
||||||
#define DBGC_EFI_PROTOCOLS( ... ) \
|
#define DBGC_EFI_PROTOCOLS( ... ) \
|
||||||
DBGC_EFI_PROTOCOLS_IF ( LOG, ##__VA_ARGS__ )
|
DBGC_EFI_PROTOCOLS_IF ( LOG, ##__VA_ARGS__ )
|
||||||
|
|
||||||
|
#define DBGC2_EFI_OPENER( ... ) \
|
||||||
|
DBGC_EFI_OPENER_IF ( EXTRA, ##__VA_ARGS__ )
|
||||||
#define DBGC2_EFI_OPENERS( ... ) \
|
#define DBGC2_EFI_OPENERS( ... ) \
|
||||||
DBGC_EFI_OPENERS_IF ( EXTRA, ##__VA_ARGS__ )
|
DBGC_EFI_OPENERS_IF ( EXTRA, ##__VA_ARGS__ )
|
||||||
#define DBGC2_EFI_PROTOCOLS( ... ) \
|
#define DBGC2_EFI_PROTOCOLS( ... ) \
|
||||||
DBGC_EFI_PROTOCOLS_IF ( EXTRA, ##__VA_ARGS__ )
|
DBGC_EFI_PROTOCOLS_IF ( EXTRA, ##__VA_ARGS__ )
|
||||||
|
|
||||||
|
#define DBGCP_EFI_OPENER( ... ) \
|
||||||
|
DBGC_EFI_OPENER_IF ( PROFILE, ##__VA_ARGS__ )
|
||||||
#define DBGCP_EFI_OPENERS( ... ) \
|
#define DBGCP_EFI_OPENERS( ... ) \
|
||||||
DBGC_EFI_OPENERS_IF ( PROFILE, ##__VA_ARGS__ )
|
DBGC_EFI_OPENERS_IF ( PROFILE, ##__VA_ARGS__ )
|
||||||
#define DBGCP_EFI_PROTOCOLS( ... ) \
|
#define DBGCP_EFI_PROTOCOLS( ... ) \
|
||||||
|
|||||||
@@ -262,6 +262,28 @@ efi_open_attributes_name ( unsigned int attributes ) {
|
|||||||
return name;
|
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
|
* 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 ) {
|
void dbg_efi_openers ( EFI_HANDLE handle, EFI_GUID *protocol ) {
|
||||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||||
EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *openers;
|
EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *openers;
|
||||||
EFI_OPEN_PROTOCOL_INFORMATION_ENTRY *opener;
|
|
||||||
UINTN count;
|
UINTN count;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
EFI_STATUS efirc;
|
EFI_STATUS efirc;
|
||||||
@@ -296,20 +317,8 @@ void dbg_efi_openers ( EFI_HANDLE handle, EFI_GUID *protocol ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Dump list of openers */
|
/* Dump list of openers */
|
||||||
for ( i = 0 ; i < count ; i++ ) {
|
for ( i = 0 ; i < count ; i++ )
|
||||||
opener = &openers[i];
|
dbg_efi_opener ( handle, protocol, &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 ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free list */
|
/* Free list */
|
||||||
bs->FreePool ( openers );
|
bs->FreePool ( openers );
|
||||||
|
|||||||
Reference in New Issue
Block a user