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;
|
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 );
|
extern int efipci_info ( EFI_HANDLE device, struct efi_pci_device *efipci );
|
||||||
|
|
||||||
#endif /* _IPXE_EFI_PCI_H */
|
#endif /* _IPXE_EFI_PCI_H */
|
||||||
|
|
|
@ -228,14 +228,27 @@ static int efi_bofm_start ( struct efi_device *efidev ) {
|
||||||
struct efi_pci_device efipci;
|
struct efi_pci_device efipci;
|
||||||
IBM_BOFM_TABLE *bofmtab;
|
IBM_BOFM_TABLE *bofmtab;
|
||||||
IBM_BOFM_TABLE *bofmtab2;
|
IBM_BOFM_TABLE *bofmtab2;
|
||||||
|
void *pci_io;
|
||||||
int bofmrc;
|
int bofmrc;
|
||||||
EFI_STATUS efirc;
|
EFI_STATUS efirc;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* Open PCI device, if possible */
|
/* Get PCI device information */
|
||||||
if ( ( rc = efipci_open ( device, EFI_OPEN_PROTOCOL_GET_PROTOCOL,
|
if ( ( rc = efipci_info ( device, &efipci ) ) != 0 ) {
|
||||||
&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;
|
goto err_open;
|
||||||
|
}
|
||||||
|
|
||||||
/* Locate BOFM protocol */
|
/* Locate BOFM protocol */
|
||||||
if ( ( efirc = bs->LocateProtocol ( &bofm1_protocol_guid, NULL,
|
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_set_status:
|
||||||
err_locate_bofm:
|
err_locate_bofm:
|
||||||
efipci_close ( device );
|
bs->CloseProtocol ( device, &efi_pci_io_protocol_guid,
|
||||||
|
efi_image_handle, device );
|
||||||
err_open:
|
err_open:
|
||||||
|
err_info:
|
||||||
return rc;
|
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 device EFI device handle
|
||||||
* @v attributes Protocol opening attributes
|
|
||||||
* @v efipci EFI PCI device to fill in
|
* @v efipci EFI PCI device to fill in
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
int efipci_open ( EFI_HANDLE device, UINT32 attributes,
|
int efipci_info ( EFI_HANDLE device, struct efi_pci_device *efipci ) {
|
||||||
struct efi_pci_device *efipci ) {
|
|
||||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||||
union {
|
union {
|
||||||
EFI_PCI_IO_PROTOCOL *pci_io;
|
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 */
|
/* See if device is a PCI device */
|
||||||
if ( ( efirc = bs->OpenProtocol ( device, &efi_pci_io_protocol_guid,
|
if ( ( efirc = bs->OpenProtocol ( device, &efi_pci_io_protocol_guid,
|
||||||
&pci_io.interface, efi_image_handle,
|
&pci_io.interface,
|
||||||
device, attributes ) ) != 0 ) {
|
efi_image_handle, device,
|
||||||
|
EFI_OPEN_PROTOCOL_GET_PROTOCOL ))!=0){
|
||||||
rc = -EEFI_PCI ( efirc );
|
rc = -EEFI_PCI ( efirc );
|
||||||
DBGCP ( device, "EFIPCI %s cannot open PCI protocols: %s\n",
|
DBGCP ( device, "EFIPCI %s cannot open PCI protocols: %s\n",
|
||||||
efi_handle_name ( device ), strerror ( rc ) );
|
efi_handle_name ( device ), strerror ( rc ) );
|
||||||
|
@ -850,39 +849,6 @@ int efipci_open ( EFI_HANDLE device, UINT32 attributes,
|
||||||
return rc;
|
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
|
* EFI PCI driver
|
||||||
|
@ -936,8 +902,11 @@ static int efipci_supported ( EFI_HANDLE device ) {
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
static int efipci_start ( struct efi_device *efidev ) {
|
static int efipci_start ( struct efi_device *efidev ) {
|
||||||
|
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||||
EFI_HANDLE device = efidev->device;
|
EFI_HANDLE device = efidev->device;
|
||||||
struct efi_pci_device *efipci;
|
struct efi_pci_device *efipci;
|
||||||
|
void *pci_io;
|
||||||
|
EFI_STATUS efirc;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* Allocate PCI device */
|
/* Allocate PCI device */
|
||||||
|
@ -947,10 +916,16 @@ static int efipci_start ( struct efi_device *efidev ) {
|
||||||
goto err_alloc;
|
goto err_alloc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Get PCI device information */
|
||||||
|
if ( ( rc = efipci_info ( device, efipci ) ) != 0 )
|
||||||
|
goto err_info;
|
||||||
|
|
||||||
/* Open PCI device */
|
/* Open PCI device */
|
||||||
if ( ( rc = efipci_open ( device, ( EFI_OPEN_PROTOCOL_BY_DRIVER |
|
if ( ( efirc = bs->OpenProtocol ( device, &efi_pci_io_protocol_guid,
|
||||||
EFI_OPEN_PROTOCOL_EXCLUSIVE ),
|
&pci_io, efi_image_handle, device,
|
||||||
efipci ) ) != 0 ) {
|
( 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",
|
DBGC ( device, "EFIPCI %s could not open PCI device: %s\n",
|
||||||
efi_handle_name ( device ), strerror ( rc ) );
|
efi_handle_name ( device ), strerror ( rc ) );
|
||||||
DBGC_EFI_OPENERS ( device, device, &efi_pci_io_protocol_guid );
|
DBGC_EFI_OPENERS ( device, device, &efi_pci_io_protocol_guid );
|
||||||
|
@ -985,8 +960,10 @@ static int efipci_start ( struct efi_device *efidev ) {
|
||||||
err_probe:
|
err_probe:
|
||||||
list_del ( &efipci->pci.dev.siblings );
|
list_del ( &efipci->pci.dev.siblings );
|
||||||
err_find_driver:
|
err_find_driver:
|
||||||
efipci_close ( device );
|
bs->CloseProtocol ( device, &efi_pci_io_protocol_guid,
|
||||||
|
efi_image_handle, device );
|
||||||
err_open:
|
err_open:
|
||||||
|
err_info:
|
||||||
free ( efipci );
|
free ( efipci );
|
||||||
err_alloc:
|
err_alloc:
|
||||||
return rc;
|
return rc;
|
||||||
|
@ -999,13 +976,15 @@ static int efipci_start ( struct efi_device *efidev ) {
|
||||||
*/
|
*/
|
||||||
static void efipci_stop ( struct efi_device *efidev ) {
|
static void efipci_stop ( struct efi_device *efidev ) {
|
||||||
struct efi_pci_device *efipci = efidev_get_drvdata ( efidev );
|
struct efi_pci_device *efipci = efidev_get_drvdata ( efidev );
|
||||||
|
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
||||||
EFI_HANDLE device = efidev->device;
|
EFI_HANDLE device = efidev->device;
|
||||||
|
|
||||||
pci_remove ( &efipci->pci );
|
pci_remove ( &efipci->pci );
|
||||||
list_del ( &efipci->pci.dev.siblings );
|
list_del ( &efipci->pci.dev.siblings );
|
||||||
assert ( efipci->pci.dma.mapped == 0 );
|
assert ( efipci->pci.dma.mapped == 0 );
|
||||||
assert ( efipci->pci.dma.allocated == 0 );
|
assert ( efipci->pci.dma.allocated == 0 );
|
||||||
efipci_close ( device );
|
bs->CloseProtocol ( device, &efi_pci_io_protocol_guid,
|
||||||
|
efi_image_handle, device );
|
||||||
free ( efipci );
|
free ( efipci );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue