diff --git a/src/arch/i386/drivers/bus/pxebus.c b/src/arch/i386/drivers/bus/pxebus.c deleted file mode 100644 index 4876fa2a..00000000 --- a/src/arch/i386/drivers/bus/pxebus.c +++ /dev/null @@ -1,182 +0,0 @@ -#if 0 - -/* - * Copyright (C) 2007 Michael Brown . - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/** @file - * - * PXE bus - * - */ - -/** - * Byte checksum - * - * @v data Data to checksum - * @v len Length of data - * @ret sum Byte checksum - */ -static uint8_t checksum ( void *data, size_t len ) { - uint8_t *bytes = data; - unsigned int sum = 0; - - while ( len-- ) - sum += *(bytes++); - - return sum; -} - -/** - * Unregister a PXE device - * - * @v pxe PXE device - * - */ -static void unregister_pxedev ( struct pxe_device *pxe ) { - undi_remove ( pxe ); - list_del ( &pxe->dev.siblings ); - DBGC ( pxe, "PXE %p unregistered\n", pxe ); -} - -static void pxebus_remove ( struct root_device *rootdev ); - -/** - * Probe PXE root bus - * - * @v rootdev PXE bus root device - * - * Scans the PXE bus for devices and registers all devices it can - * find. - */ -static int pxebus_probe ( struct root_device *rootdev ) { - struct pxe_device *pxe = NULL; - struct s_PXENV pxenv; - struct s_PXE ppxe; - uint16_t fbms; - unsigned int segment; - unsigned int undi_cs; - int rc; - - /* Scan through allocated base memory for PXENV+ structure */ - get_real ( fbms, BDA_SEG, BDA_FBMS ); - for ( segment = ( fbms << 6 ) ; segment < 0xa000 ; segment++ ) { - - /* Verify PXENV+ signature and checksum */ - copy_from_real ( &pxenv, segment, 0, sizeof ( pxenv ) ); - if ( memcmp ( pxenv.Signature, "PXENV+", 6 ) != 0 ) - continue; - DBG ( "Found PXENV+ signature at %04x0\n", segment ); - if ( checksum ( &pxenv, sizeof ( pxenv ) ) != 0 ) { - DBG ( "...bad checksum\n" ); - continue; - } - - /* Allocate PXE device structure */ - pxe = malloc ( sizeof ( *pxe ) ); - if ( ! pxe ) { - rc = -ENOMEM; - goto err; - } - memset ( pxe, 0, sizeof ( *pxe ) ); - - /* Add to device hierarchy */ - pxe->dev.parent = &rootdev->dev; - INIT_LIST_HEAD ( &pxe->dev.children ); - list_add ( &pxe->dev.siblings, &rootdev->dev.children ); - - /* Populate PXE device structure */ - undi_cs = pxenv.UNDICodeSeg; - pxe->pxenv.segment = undi_cs; - pxe->pxenv.offset = ( ( segment - undi_cs ) << 4 ); - DBGC ( pxe, "PXE %p has PXENV+ structure at %04x:%04x\n", - pxe, pxe->pxenv.segment, pxe->pxenv.offset ); - pxe->entry = pxenv.RMEntry; - if ( pxenv.Version >= 0x0201 ) { - pxe->ppxe = pxenv.PXEPtr; - copy_from_real ( &ppxe, pxe->ppxe.segment, - pxe->ppxe.offset, sizeof ( ppxe ) ); - if ( ( memcmp ( ppxe.Signature, "!PXE", 4 ) == 0 ) && - ( checksum ( &ppxe, sizeof ( ppxe ) ) == 0 ) ) { - DBGC ( pxe, "PXE %p has !PXE structure at " - "%04x:%04x\n", pxe, - pxe->ppxe.segment, pxe->ppxe.offset ); - pxe->entry = ppxe.EntryPointSP; - } - } - DBGC ( pxe, "PXE %p using entry point at %04x:%04x\n", pxe, - pxe->entry.segment, pxe->entry.offset ); - - /* Register PXE device */ - if ( undi_probe ( pxe ) == 0 ) { - /* Device registered; drop reference */ - pxe = NULL; - } else { - /* Not registered; re-use struct pxe_device */ - list_del ( &pxe->dev.siblings ); - } - } - - free ( pxe ); - return 0; - - err: - free ( pxe ); - pxebus_remove ( rootdev ); - return rc; -} - -/** - * Remove PXE root bus - * - * @v rootdev PXE bus root device - */ -static void pxebus_remove ( struct root_device *rootdev ) { - struct pxe_device *pxe; - struct pxe_device *tmp; - - list_for_each_entry_safe ( pxe, tmp, &rootdev->dev.children, - dev.siblings ) { - unregister_pxedev ( pxe ); - free ( pxe ); - } -} - -/** PXE bus root device driver */ -static struct root_driver pxe_root_driver = { - .probe = pxebus_probe, - .remove = pxebus_remove, -}; - -/** PXE bus root device */ -struct root_device pxe_root_device __root_device = { - .name = "PXE", - .driver = &pxe_root_driver, -}; - -#endif