mirror of https://github.com/ipxe/ipxe.git
[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>pull/34/merge
parent
3283885326
commit
48d1680127
|
@ -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 );
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue