diff options
| author | Michael Brown | 2008-11-19 04:16:42 +0100 |
|---|---|---|
| committer | Michael Brown | 2008-11-19 20:20:45 +0100 |
| commit | d9b3d0991091b8dd568b17221e335ecf81beb02f (patch) | |
| tree | 79553bf0b4a40064506d13a730767266c938eec6 /src/usr | |
| parent | [i386] Change [u]int32_t to [unsigned] int, rather than [unsigned] long (diff) | |
| download | ipxe-d9b3d0991091b8dd568b17221e335ecf81beb02f.tar.gz ipxe-d9b3d0991091b8dd568b17221e335ecf81beb02f.tar.xz ipxe-d9b3d0991091b8dd568b17221e335ecf81beb02f.zip | |
[i386] Move iSCSI and AoE boot code to arch/i386/interface/pcbios
Diffstat (limited to 'src/usr')
| -rw-r--r-- | src/usr/aoeboot.c | 79 | ||||
| -rw-r--r-- | src/usr/iscsiboot.c | 108 |
2 files changed, 0 insertions, 187 deletions
diff --git a/src/usr/aoeboot.c b/src/usr/aoeboot.c deleted file mode 100644 index e977b10fe..000000000 --- a/src/usr/aoeboot.c +++ /dev/null @@ -1,79 +0,0 @@ -#include <stdint.h> -#include <string.h> -#include <stdio.h> -#include <byteswap.h> -#include <gpxe/aoe.h> -#include <gpxe/ata.h> -#include <gpxe/netdevice.h> -#include <gpxe/settings.h> -#include <gpxe/sanboot.h> -#include <gpxe/abft.h> -#include <int13.h> - -/** - * Guess boot network device - * - * @ret netdev Boot network device - */ -static struct net_device * guess_boot_netdev ( void ) { - struct net_device *netdev; - - /* Just use the first network device */ - for_each_netdev ( netdev ) { - if ( netdev->state & NETDEV_OPEN ) - return netdev; - } - - return NULL; -} - -static int aoeboot ( const char *root_path ) { - struct ata_device ata; - struct int13_drive drive; - int rc; - - memset ( &ata, 0, sizeof ( ata ) ); - memset ( &drive, 0, sizeof ( drive ) ); - - printf ( "AoE booting from %s\n", root_path ); - - /* FIXME: ugly, ugly hack */ - struct net_device *netdev = guess_boot_netdev(); - - if ( ( rc = aoe_attach ( &ata, netdev, root_path ) ) != 0 ) { - printf ( "Could not attach AoE device: %s\n", - strerror ( rc ) ); - goto error_attach; - } - if ( ( rc = init_atadev ( &ata ) ) != 0 ) { - printf ( "Could not initialise AoE device: %s\n", - strerror ( rc ) ); - goto error_init; - } - - /* FIXME: ugly, ugly hack */ - struct aoe_session *aoe = - container_of ( ata.backend, struct aoe_session, refcnt ); - abft_fill_data ( aoe ); - - drive.blockdev = &ata.blockdev; - - register_int13_drive ( &drive ); - printf ( "Registered as BIOS drive %#02x\n", drive.drive ); - printf ( "Booting from BIOS drive %#02x\n", drive.drive ); - rc = int13_boot ( drive.drive ); - printf ( "Boot failed\n" ); - - printf ( "Unregistering BIOS drive %#02x\n", drive.drive ); - unregister_int13_drive ( &drive ); - - error_init: - aoe_detach ( &ata ); - error_attach: - return rc; -} - -struct sanboot_protocol aoe_sanboot_protocol __sanboot_protocol = { - .prefix = "aoe:", - .boot = aoeboot, -}; diff --git a/src/usr/iscsiboot.c b/src/usr/iscsiboot.c deleted file mode 100644 index cdf7790bb..000000000 --- a/src/usr/iscsiboot.c +++ /dev/null @@ -1,108 +0,0 @@ -#include <stdint.h> -#include <string.h> -#include <stdlib.h> -#include <stdio.h> -#include <errno.h> -#include <gpxe/iscsi.h> -#include <gpxe/settings.h> -#include <gpxe/dhcp.h> -#include <gpxe/netdevice.h> -#include <gpxe/ibft.h> -#include <gpxe/init.h> -#include <gpxe/sanboot.h> -#include <int13.h> -#include <usr/autoboot.h> - -struct setting keep_san_setting __setting = { - .name = "keep-san", - .description = "Preserve SAN connection", - .tag = DHCP_EB_KEEP_SAN, - .type = &setting_type_int8, -}; - -/** - * Guess boot network device - * - * @ret netdev Boot network device - */ -static struct net_device * guess_boot_netdev ( void ) { - struct net_device *netdev; - - /* Just use the first network device */ - for_each_netdev ( netdev ) { - if ( netdev->state & NETDEV_OPEN ) - return netdev; - } - - return NULL; -} - -static int iscsiboot ( const char *root_path ) { - struct scsi_device *scsi; - struct int13_drive *drive; - int keep_san; - int rc; - - scsi = zalloc ( sizeof ( *scsi ) ); - if ( ! scsi ) { - rc = -ENOMEM; - goto err_alloc_scsi; - } - drive = zalloc ( sizeof ( *drive ) ); - if ( ! drive ) { - rc = -ENOMEM; - goto err_alloc_drive; - } - - printf ( "iSCSI booting from %s\n", root_path ); - - if ( ( rc = iscsi_attach ( scsi, root_path ) ) != 0 ) { - printf ( "Could not attach iSCSI device: %s\n", - strerror ( rc ) ); - goto err_attach; - } - if ( ( rc = init_scsidev ( scsi ) ) != 0 ) { - printf ( "Could not initialise iSCSI device: %s\n", - strerror ( rc ) ); - goto err_init; - } - - drive->blockdev = &scsi->blockdev; - - /* FIXME: ugly, ugly hack */ - struct net_device *netdev = guess_boot_netdev(); - struct iscsi_session *iscsi = - container_of ( scsi->backend, struct iscsi_session, refcnt ); - ibft_fill_data ( netdev, iscsi ); - - register_int13_drive ( drive ); - printf ( "Registered as BIOS drive %#02x\n", drive->drive ); - printf ( "Booting from BIOS drive %#02x\n", drive->drive ); - rc = int13_boot ( drive->drive ); - printf ( "Boot failed\n" ); - - /* Leave drive registered, if instructed to do so */ - keep_san = fetch_intz_setting ( NULL, &keep_san_setting ); - if ( keep_san ) { - printf ( "Preserving connection to SAN disk\n" ); - shutdown_exit_flags |= SHUTDOWN_KEEP_DEVICES; - return rc; - } - - printf ( "Unregistering BIOS drive %#02x\n", drive->drive ); - unregister_int13_drive ( drive ); - - err_init: - iscsi_detach ( scsi ); - err_attach: - free ( drive ); - err_alloc_drive: - free ( scsi ); - err_alloc_scsi: - return rc; -} - -struct sanboot_protocol iscsi_sanboot_protocol __sanboot_protocol = { - .prefix = "iscsi:", - .boot = iscsiboot, -}; |
