mirror of
https://github.com/ipxe/ipxe
synced 2025-12-12 14:32:49 +03:00
[efi] Remove the efipci_open() and efipci_close() wrappers
In preparation for formalising the way that EFI protocols are opened across the codebase, remove the efipci_open() wrapper. Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -25,9 +25,6 @@ struct efi_pci_device {
|
||||
EFI_PCI_IO_PROTOCOL *io;
|
||||
};
|
||||
|
||||
extern int efipci_open ( EFI_HANDLE device, UINT32 attributes,
|
||||
struct efi_pci_device *efipci );
|
||||
extern void efipci_close ( EFI_HANDLE device );
|
||||
extern int efipci_info ( EFI_HANDLE device, struct efi_pci_device *efipci );
|
||||
|
||||
#endif /* _IPXE_EFI_PCI_H */
|
||||
|
||||
@@ -228,14 +228,27 @@ static int efi_bofm_start ( struct efi_device *efidev ) {
|
||||
struct efi_pci_device efipci;
|
||||
IBM_BOFM_TABLE *bofmtab;
|
||||
IBM_BOFM_TABLE *bofmtab2;
|
||||
void *pci_io;
|
||||
int bofmrc;
|
||||
EFI_STATUS efirc;
|
||||
int rc;
|
||||
|
||||
/* Open PCI device, if possible */
|
||||
if ( ( rc = efipci_open ( device, EFI_OPEN_PROTOCOL_GET_PROTOCOL,
|
||||
&efipci ) ) != 0 )
|
||||
/* Get PCI device information */
|
||||
if ( ( rc = efipci_info ( device, &efipci ) ) != 0 ) {
|
||||
DBGC ( device, "EFIBOFM %s cannot get PCI information: %s\n",
|
||||
efi_handle_name ( device ), strerror ( rc ) );
|
||||
goto err_info;
|
||||
}
|
||||
|
||||
/* Open PCI I/O protocol */
|
||||
if ( ( efirc = bs->OpenProtocol ( device, &efi_pci_io_protocol_guid,
|
||||
&pci_io, efi_image_handle, device,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL ))!=0){
|
||||
rc = -EEFI ( efirc );
|
||||
DBGC ( device, "EFIBOFM %s cannot open PCI device: %s\n",
|
||||
efi_handle_name ( device ), strerror ( rc ) );
|
||||
goto err_open;
|
||||
}
|
||||
|
||||
/* Locate BOFM protocol */
|
||||
if ( ( efirc = bs->LocateProtocol ( &bofm1_protocol_guid, NULL,
|
||||
@@ -313,8 +326,10 @@ static int efi_bofm_start ( struct efi_device *efidev ) {
|
||||
|
||||
err_set_status:
|
||||
err_locate_bofm:
|
||||
efipci_close ( device );
|
||||
bs->CloseProtocol ( device, &efi_pci_io_protocol_guid,
|
||||
efi_image_handle, device );
|
||||
err_open:
|
||||
err_info:
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
@@ -771,15 +771,13 @@ static struct dma_operations efipci_dma_operations = {
|
||||
*/
|
||||
|
||||
/**
|
||||
* Open EFI PCI device
|
||||
* Get EFI PCI device information
|
||||
*
|
||||
* @v device EFI device handle
|
||||
* @v attributes Protocol opening attributes
|
||||
* @v efipci EFI PCI device to fill in
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int efipci_open ( EFI_HANDLE device, UINT32 attributes,
|
||||
struct efi_pci_device *efipci ) {
|
||||
int efipci_info ( EFI_HANDLE device, struct efi_pci_device *efipci ) {
|
||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||
union {
|
||||
EFI_PCI_IO_PROTOCOL *pci_io;
|
||||
@@ -792,8 +790,9 @@ int efipci_open ( EFI_HANDLE device, UINT32 attributes,
|
||||
|
||||
/* See if device is a PCI device */
|
||||
if ( ( efirc = bs->OpenProtocol ( device, &efi_pci_io_protocol_guid,
|
||||
&pci_io.interface, efi_image_handle,
|
||||
device, attributes ) ) != 0 ) {
|
||||
&pci_io.interface,
|
||||
efi_image_handle, device,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL ))!=0){
|
||||
rc = -EEFI_PCI ( efirc );
|
||||
DBGCP ( device, "EFIPCI %s cannot open PCI protocols: %s\n",
|
||||
efi_handle_name ( device ), strerror ( rc ) );
|
||||
@@ -850,39 +849,6 @@ int efipci_open ( EFI_HANDLE device, UINT32 attributes,
|
||||
return rc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Close EFI PCI device
|
||||
*
|
||||
* @v device EFI device handle
|
||||
*/
|
||||
void efipci_close ( EFI_HANDLE device ) {
|
||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||
|
||||
bs->CloseProtocol ( device, &efi_pci_io_protocol_guid,
|
||||
efi_image_handle, device );
|
||||
}
|
||||
|
||||
/**
|
||||
* Get EFI PCI device information
|
||||
*
|
||||
* @v device EFI device handle
|
||||
* @v efipci EFI PCI device to fill in
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
int efipci_info ( EFI_HANDLE device, struct efi_pci_device *efipci ) {
|
||||
int rc;
|
||||
|
||||
/* Open PCI device, if possible */
|
||||
if ( ( rc = efipci_open ( device, EFI_OPEN_PROTOCOL_GET_PROTOCOL,
|
||||
efipci ) ) != 0 )
|
||||
return rc;
|
||||
|
||||
/* Close PCI device */
|
||||
efipci_close ( device );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
*
|
||||
* EFI PCI driver
|
||||
@@ -936,8 +902,11 @@ static int efipci_supported ( EFI_HANDLE device ) {
|
||||
* @ret rc Return status code
|
||||
*/
|
||||
static int efipci_start ( struct efi_device *efidev ) {
|
||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||
EFI_HANDLE device = efidev->device;
|
||||
struct efi_pci_device *efipci;
|
||||
void *pci_io;
|
||||
EFI_STATUS efirc;
|
||||
int rc;
|
||||
|
||||
/* Allocate PCI device */
|
||||
@@ -947,10 +916,16 @@ static int efipci_start ( struct efi_device *efidev ) {
|
||||
goto err_alloc;
|
||||
}
|
||||
|
||||
/* Get PCI device information */
|
||||
if ( ( rc = efipci_info ( device, efipci ) ) != 0 )
|
||||
goto err_info;
|
||||
|
||||
/* Open PCI device */
|
||||
if ( ( rc = efipci_open ( device, ( EFI_OPEN_PROTOCOL_BY_DRIVER |
|
||||
EFI_OPEN_PROTOCOL_EXCLUSIVE ),
|
||||
efipci ) ) != 0 ) {
|
||||
if ( ( efirc = bs->OpenProtocol ( device, &efi_pci_io_protocol_guid,
|
||||
&pci_io, efi_image_handle, device,
|
||||
( EFI_OPEN_PROTOCOL_BY_DRIVER |
|
||||
EFI_OPEN_PROTOCOL_EXCLUSIVE )))!=0){
|
||||
rc = -EEFI_PCI ( efirc );
|
||||
DBGC ( device, "EFIPCI %s could not open PCI device: %s\n",
|
||||
efi_handle_name ( device ), strerror ( rc ) );
|
||||
DBGC_EFI_OPENERS ( device, device, &efi_pci_io_protocol_guid );
|
||||
@@ -985,8 +960,10 @@ static int efipci_start ( struct efi_device *efidev ) {
|
||||
err_probe:
|
||||
list_del ( &efipci->pci.dev.siblings );
|
||||
err_find_driver:
|
||||
efipci_close ( device );
|
||||
bs->CloseProtocol ( device, &efi_pci_io_protocol_guid,
|
||||
efi_image_handle, device );
|
||||
err_open:
|
||||
err_info:
|
||||
free ( efipci );
|
||||
err_alloc:
|
||||
return rc;
|
||||
@@ -999,13 +976,15 @@ static int efipci_start ( struct efi_device *efidev ) {
|
||||
*/
|
||||
static void efipci_stop ( struct efi_device *efidev ) {
|
||||
struct efi_pci_device *efipci = efidev_get_drvdata ( efidev );
|
||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||
EFI_HANDLE device = efidev->device;
|
||||
|
||||
pci_remove ( &efipci->pci );
|
||||
list_del ( &efipci->pci.dev.siblings );
|
||||
assert ( efipci->pci.dma.mapped == 0 );
|
||||
assert ( efipci->pci.dma.allocated == 0 );
|
||||
efipci_close ( device );
|
||||
bs->CloseProtocol ( device, &efi_pci_io_protocol_guid,
|
||||
efi_image_handle, device );
|
||||
free ( efipci );
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user