From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lnhjn-0004Ao-Im for qemu-devel@nongnu.org; Sat, 28 Mar 2009 19:14:51 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lnhjm-00049f-L9 for qemu-devel@nongnu.org; Sat, 28 Mar 2009 19:14:51 -0400 Received: from [199.232.76.173] (port=36332 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lnhjm-00049V-GG for qemu-devel@nongnu.org; Sat, 28 Mar 2009 19:14:50 -0400 Received: from hall.aurel32.net ([88.191.82.174]:57647) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Lnhjm-0007e1-0j for qemu-devel@nongnu.org; Sat, 28 Mar 2009 19:14:50 -0400 Date: Sun, 29 Mar 2009 00:14:46 +0100 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCH] support 93xx EEPROMs with more than 255 words Message-ID: <20090328231446.GD14328@volta.aurel32.net> References: <12353435271060-git-send-email-andre.przywara@amd.com> <1235343732985-git-send-email-andre.przywara@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <1235343732985-git-send-email-andre.przywara@amd.com> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Andre Przywara On Mon, Feb 23, 2009 at 12:02:12AM +0100, Andre Przywara wrote: > In the head of eeprom93xx.c we promise to support chips with 256 words, > but store the size in an unsigned byte. This patch replaces this with an > 16 bit variable and changes the load/store code accordingly (introducing a > new version). > > Signed-off-by: Andre Przywara Thanks, applied. > --- > hw/eeprom93xx.c | 24 ++++++++++++++---------- > 1 files changed, 14 insertions(+), 10 deletions(-) > > diff --git a/hw/eeprom93xx.c b/hw/eeprom93xx.c > index 527fdf7..e791894 100644 > --- a/hw/eeprom93xx.c > +++ b/hw/eeprom93xx.c > @@ -49,8 +49,9 @@ > #define logout(fmt, args...) ((void)0) > #endif > > -static int eeprom_instance = 0; > -static const int eeprom_version = 20061112; > +#define EEPROM_INSTANCE 0 > +#define OLD_EEPROM_VERSION 20061112 > +#define EEPROM_VERSION (OLD_EEPROM_VERSION + 1) > > #if 0 > typedef enum { > @@ -83,7 +84,7 @@ struct _eeprom_t { > uint8_t eedo; > > uint8_t addrbits; > - uint8_t size; > + uint16_t size; > uint16_t data; > uint16_t contents[0]; > }; > @@ -106,8 +107,7 @@ static void eeprom_save(QEMUFile *f, void *opaque) > qemu_put_byte(f, eeprom->eedo); > > qemu_put_byte(f, eeprom->addrbits); > - qemu_put_byte(f, eeprom->size); > - qemu_put_byte(f, 0); /* padding for compatiblity */ > + qemu_put_be16(f, eeprom->size); > qemu_put_be16(f, eeprom->data); > for (address = 0; address < eeprom->size; address++) { > qemu_put_be16(f, eeprom->contents[address]); > @@ -120,9 +120,9 @@ static int eeprom_load(QEMUFile *f, void *opaque, int version_id) > of data and current EEPROM are identical. */ > eeprom_t *eeprom = (eeprom_t *)opaque; > int result = -EINVAL; > - if (version_id == eeprom_version) { > + if (version_id >= OLD_EEPROM_VERSION) { > unsigned address; > - uint8_t size = eeprom->size; > + int size = eeprom->size; > > eeprom->tick = qemu_get_byte(f); > eeprom->address = qemu_get_byte(f); > @@ -134,8 +134,12 @@ static int eeprom_load(QEMUFile *f, void *opaque, int version_id) > eeprom->eedo = qemu_get_byte(f); > > eeprom->addrbits = qemu_get_byte(f); > - eeprom->size = qemu_get_byte(f); > - qemu_get_byte(f); /* skip padding byte */ > + if (version_id == OLD_EEPROM_VERSION) { > + eeprom->size = qemu_get_byte(f); > + dummy = qemu_get_byte(f); > + } else { > + eeprom->size = qemu_get_be16(f); > + } > > if (eeprom->size == size) { > eeprom->data = qemu_get_be16(f); > @@ -317,7 +321,7 @@ eeprom_t *eeprom93xx_new(uint16_t nwords) > /* Output DO is tristate, read results in 1. */ > eeprom->eedo = 1; > logout("eeprom = 0x%p, nwords = %u\n", eeprom, nwords); > - register_savevm("eeprom", eeprom_instance, eeprom_version, > + register_savevm("eeprom", EEPROM_INSTANCE, EEPROM_VERSION, > eeprom_save, eeprom_load, eeprom); > return eeprom; > } > -- > 1.5.2.2 > > > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net