[efi] Include NII driver within "snp" and "snponly" build targets

End users almost certainly don't care whether the underlying interface
is SNP or NII/UNDI.  Try to minimise surprise and unnecessary
documentation by including the NII driver whenever the SNP driver is
requested.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2014-10-17 16:36:00 +01:00
parent feb3a0f7d5
commit af17abf67f
4 changed files with 209 additions and 120 deletions

View File

@@ -24,6 +24,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <ipxe/efi/efi_driver.h>
#include <ipxe/efi/efi_snp.h>
#include "snpnet.h"
#include "nii.h"
/** @file
*
@@ -63,6 +64,38 @@ static int snp_supported ( EFI_HANDLE device ) {
return 0;
}
/**
* Check to see if driver supports a device
*
* @v device EFI device handle
* @ret rc Return status code
*/
static int nii_supported ( EFI_HANDLE device ) {
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
EFI_STATUS efirc;
/* Check that this is not a device we are providing ourselves */
if ( find_snpdev ( device ) != NULL ) {
DBGCP ( device, "NII %p %s is provided by this binary\n",
device, efi_handle_name ( device ) );
return -ENOTTY;
}
/* Test for presence of NII protocol */
if ( ( efirc = bs->OpenProtocol ( device,
&efi_nii31_protocol_guid,
NULL, efi_image_handle, device,
EFI_OPEN_PROTOCOL_TEST_PROTOCOL))!=0){
DBGCP ( device, "NII %p %s is not an NII device\n",
device, efi_handle_name ( device ) );
return -EEFI ( efirc );
}
DBGC ( device, "NII %p %s is an NII device\n",
device, efi_handle_name ( device ) );
return 0;
}
/** EFI SNP driver */
struct efi_driver snp_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
.name = "SNP",
@@ -70,3 +103,11 @@ struct efi_driver snp_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
.start = snpnet_start,
.stop = snpnet_stop,
};
/** EFI NII driver */
struct efi_driver nii_driver __efi_driver ( EFI_DRIVER_NORMAL ) = {
.name = "NII",
.supported = nii_supported,
.start = nii_start,
.stop = nii_stop,
};