From patchwork Tue Mar 2 18:43:36 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Weil X-Patchwork-Id: 46689 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 88C32B7D27 for ; Wed, 3 Mar 2010 05:45:51 +1100 (EST) Received: from localhost ([127.0.0.1]:35955 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NmX6K-0005Hu-Pt for incoming@patchwork.ozlabs.org; Tue, 02 Mar 2010 13:45:48 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NmX5U-0005EP-KW for qemu-devel@nongnu.org; Tue, 02 Mar 2010 13:44:56 -0500 Received: from [199.232.76.173] (port=39571 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NmX5U-0005EF-5L for qemu-devel@nongnu.org; Tue, 02 Mar 2010 13:44:56 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NmX5R-0003kL-Fx for qemu-devel@nongnu.org; Tue, 02 Mar 2010 13:44:55 -0500 Received: from moutng.kundenserver.de ([212.227.126.186]:55323) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NmX5Q-0003jE-Gf for qemu-devel@nongnu.org; Tue, 02 Mar 2010 13:44:53 -0500 Received: from flocke.weilnetz.de (p54ADFEFD.dip.t-dialin.net [84.173.254.253]) by mrelayeu.kundenserver.de (node=mrbap1) with ESMTP (Nemesis) id 0MfBqk-1O6mw90FsA-00Ou74; Tue, 02 Mar 2010 19:43:43 +0100 Received: from stefan by flocke.weilnetz.de with local (Exim 4.71) (envelope-from ) id 1NmX4F-0003EV-7K; Tue, 02 Mar 2010 19:43:39 +0100 From: Stefan Weil To: QEMU Developers X-Mailer: git-send-email 1.7.0 In-Reply-To: <1266164189-21062-3-git-send-email-weil@mail.berlios.de> References: <1266164189-21062-3-git-send-email-weil@mail.berlios.de> X-Provags-ID: V01U2FsdGVkX1/D24JEMtWl9Vh1zNrUd4E3SqcC2H931YRdBgB 2lT9+ZSLZ5xy+8JFk9MuwWWC40ELngcyRnqIl4xjGT4xUZeGg8 vRRhkoWcPa8SlukZIPU65lPsAzbaXnoOqhjgtVCjY6LrhqnU1d fDQ== X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: mst@redhat.com Subject: [Qemu-devel] [PATCH 03/20] eepro100: Fix PXE boot X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org The phy handling was wrong for PXE, GPXE boot: GPXE's eepro100 driver did not detect a valid link. This is fixed here. V2 - Use UPPER_CASE for enum values Signed-off-by: Stefan Weil --- hw/eepro100.c | 20 ++++++++++++++------ 1 files changed, 14 insertions(+), 6 deletions(-) diff --git a/hw/eepro100.c b/hw/eepro100.c index 124bc49..f6764cc 100644 --- a/hw/eepro100.c +++ b/hw/eepro100.c @@ -20,7 +20,7 @@ * along with this program; if not, see . * * Tested features (i82559): - * PXE boot (i386) no valid link + * PXE boot (i386) ok * Linux networking (i386) ok * * Untested: @@ -33,10 +33,6 @@ * Open Source Software Developer Manual */ -#if defined(TARGET_I386) -# warning "PXE boot still not working!" -#endif - #include /* offsetof */ #include #include "hw.h" @@ -243,6 +239,17 @@ typedef struct { bool has_extended_tcb_support; } EEPRO100State; +/* Word indices in EEPROM. */ +typedef enum { + EEPROM_CNFG_MDIX = 0x03, + EEPROM_ID = 0x05, + EEPROM_PHY_ID = 0x06, + EEPROM_VENDOR_ID = 0x0c, + EEPROM_CONFIG_ASF = 0x0d, + EEPROM_DEVICE_ID = 0x23, + EEPROM_SMBUS_ADDR = 0x90, +} EEPROMOffset; + /* Default values for MDI (PHY) registers */ static const uint16_t eepro100_mdi_default[] = { /* MDI Registers 0 - 6, 7 */ @@ -632,9 +639,10 @@ static void nic_selective_reset(EEPRO100State * s) uint16_t *eeprom_contents = eeprom93xx_data(s->eeprom); //~ eeprom93xx_reset(s->eeprom); memcpy(eeprom_contents, s->conf.macaddr.a, 6); - eeprom_contents[0xa] = 0x4000; + eeprom_contents[EEPROM_ID] = 0x4000; if (s->device == i82557B || s->device == i82557C) eeprom_contents[5] = 0x0100; + eeprom_contents[EEPROM_PHY_ID] = 1; uint16_t sum = 0; for (i = 0; i < EEPROM_SIZE - 1; i++) { sum += eeprom_contents[i];