iPXE
efi_autoboot.c
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2014 Michael Brown <mbrown@fensystems.co.uk>.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License as
6  * published by the Free Software Foundation; either version 2 of the
7  * License, or any later version.
8  *
9  * This program is distributed in the hope that it will be useful, but
10  * WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
17  * 02110-1301, USA.
18  *
19  * You can also choose to distribute this program under the terms of
20  * the Unmodified Binary Distribution Licence (as given in the file
21  * COPYING.UBDL), provided that you have satisfied its requirements.
22  */
23 
24 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
25 
26 #include <ipxe/efi/efi.h>
27 #include <ipxe/efi/efi_autoboot.h>
29 #include <usr/autoboot.h>
30 
31 /** @file
32  *
33  * EFI autoboot device
34  *
35  */
36 
37 /**
38  * Identify autoboot device
39  *
40  */
41 void efi_set_autoboot ( void ) {
43  union {
45  void *interface;
46  } snp;
48  EFI_STATUS efirc;
49 
50  /* Look for an SNP instance on the image's device handle */
51  if ( ( efirc = bs->OpenProtocol ( efi_loaded_image->DeviceHandle,
53  &snp.interface, efi_image_handle,
54  NULL,
56  DBGC ( efi_loaded_image, "EFI found no autoboot device\n" );
57  return;
58  }
59 
60  /* Record autoboot device */
61  mode = snp.snp->Mode;
63  DBGC ( efi_loaded_image, "EFI found autoboot link-layer address:\n" );
65  mode->HwAddressSize );
66 
67  /* Close protocol */
71 }
void set_autoboot_ll_addr(const void *ll_addr, size_t len)
Identify autoboot device by link-layer address.
Definition: autoboot.c:506
EFI_BOOT_SERVICES * BootServices
A pointer to the EFI Boot Services Table.
Definition: UefiSpec.h:2000
EFI_LOADED_IMAGE_PROTOCOL * efi_loaded_image
Loaded image protocol for this image.
Definition: efi_init.c:33
The EFI_SIMPLE_NETWORK_PROTOCOL protocol is used to initialize access to a network adapter.
EFI_GUID efi_simple_network_protocol_guid
Simple network protocol GUID.
Definition: efi_guid.c:236
#define DBGC(...)
Definition: compiler.h:505
Automatic booting.
EFI_CLOSE_PROTOCOL CloseProtocol
Definition: UefiSpec.h:1906
EFI_MAC_ADDRESS CurrentAddress
The current HW MAC address for the network interface.
void efi_set_autoboot(void)
Identify autoboot device.
Definition: efi_autoboot.c:41
An object interface.
Definition: interface.h:109
#define DBGC_HDA(...)
Definition: compiler.h:506
The EFI_SIMPLE_NETWORK_PROTOCOL provides services to initialize a network interface,...
#define EFI_OPEN_PROTOCOL_GET_PROTOCOL
Definition: UefiSpec.h:1271
EFI Boot Services Table.
Definition: UefiSpec.h:1836
EFI_HANDLE efi_image_handle
Image handle passed to entry point.
Definition: efi_init.c:30
EFI autoboot device.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
EFI API.
UINT32 HwAddressSize
The size, in bytes, of the network interface's HW address.
RETURN_STATUS EFI_STATUS
Function return status for EFI API.
Definition: UefiBaseType.h:35
EFI_SYSTEM_TABLE * efi_systab
EFI_OPEN_PROTOCOL OpenProtocol
Definition: UefiSpec.h:1905
#define NULL
NULL pointer (VOID *)
Definition: Base.h:362
EFI_HANDLE DeviceHandle
The device handle that the EFI Image was loaded from.
Definition: LoadedImage.h:61