From patchwork Thu Mar 12 16:16:34 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Gabriel L. Somlo" X-Patchwork-Id: 449572 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id AD1191400D5 for ; Fri, 13 Mar 2015 03:17:03 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=gmail.com header.i=@gmail.com header.b=zIlD8je1; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: from localhost ([::1]:32831 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YW5nA-0007Zh-Qu for incoming@patchwork.ozlabs.org; Thu, 12 Mar 2015 12:17:00 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48270) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YW5ms-0007I3-Ix for qemu-devel@nongnu.org; Thu, 12 Mar 2015 12:16:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YW5mn-0005VM-D6 for qemu-devel@nongnu.org; Thu, 12 Mar 2015 12:16:42 -0400 Received: from mail-qg0-x22f.google.com ([2607:f8b0:400d:c04::22f]:36473) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YW5mn-0005V5-0K for qemu-devel@nongnu.org; Thu, 12 Mar 2015 12:16:37 -0400 Received: by qgdz107 with SMTP id z107so19307067qgd.3 for ; Thu, 12 Mar 2015 09:16:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:references:mime-version :content-type:content-disposition:in-reply-to:user-agent; bh=dk57Wz+X9IdBHr5otOYt5Q9LZenOrmKFMIUfJeWXvQY=; b=zIlD8je10k6knaO2zRQnX5SywZ2xECC9PlRq2wuCbxVI4M+JY9K4WCUbpJ9XXddvsC 6ymlbYjxaWj1X2Exj/HHhkU+ohcKJdH/5PUjbSg9tGuY8ulbrR/6o+6CmDYKYtbNFcfJ 9sjrOUKcYRoglHjPSj21xUMq4JmjtomJ5YM/kRwc3PoYCRjZsRm3mOwQrI9jzsEzXuk0 ruZphY23dJoksk72e4nTmAT9MXFH72XWLN14I9NCQQZT5MI3UK6wFT22shiTrGKgOXUM oFAGGNaXxZ1K7N2c/ZJmQsjl0zXM//DouSb6JwvKqzUi/gMwOmUvzgeKDP4TgSpzKxMI lPKw== X-Received: by 10.55.16.159 with SMTP id 31mr37160102qkq.80.1426176996586; Thu, 12 Mar 2015 09:16:36 -0700 (PDT) Received: from HEDWIG.INI.CMU.EDU (HEDWIG.INI.CMU.EDU. [128.2.16.51]) by mx.google.com with ESMTPSA id 132sm5028131qhd.11.2015.03.12.09.16.35 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 12 Mar 2015 09:16:36 -0700 (PDT) Date: Thu, 12 Mar 2015 12:16:34 -0400 From: "Gabriel L. Somlo" To: Laszlo Ersek Message-ID: <20150312161631.GX1832@HEDWIG.INI.CMU.EDU> References: <20150311152758.GU1832@HEDWIG.INI.CMU.EDU> <55008E80.50907@redhat.com> <20150311204537.GW1832@HEDWIG.INI.CMU.EDU> <5500B3E1.8020402@redhat.com> <55019FE8.1020706@redhat.com> <5501B3E1.5000208@redhat.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <5501B3E1.5000208@redhat.com> User-Agent: Mutt/1.5.23 (2014-03-12) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c04::22f Cc: Paolo Bonzini , gleb@cloudius-systems.com, qemu-devel@nongnu.org, jordan.l.justen@intel.com Subject: Re: [Qemu-devel] fw_cfg specification ? X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org On Thu, Mar 12, 2015 at 04:42:25PM +0100, Laszlo Ersek wrote: > On 03/12/15 15:17, Paolo Bonzini wrote: > > Let's nuke it. :) > > Okay... Gabriel, do you want to include such a patch in your upcoming > series, or should I do the nuking sooner? I was working on it (good for practice :) and so far I have the patch below. Still trying to understand how to update .valid.accepts in the various mem_ops structures, but I think I'm on the right track. Will send a proper patch once I wrap my head around that :) Thanks, --Gabriel diff --git a/hw/nvram/fw_cfg.c b/hw/nvram/fw_cfg.c index 78a37be..0a9eaf6 100644 --- a/hw/nvram/fw_cfg.c +++ b/hw/nvram/fw_cfg.c @@ -46,7 +46,6 @@ typedef struct FWCfgEntry { uint32_t len; uint8_t *data; void *callback_opaque; - FWCfgCallback callback; FWCfgReadCallback read_callback; } FWCfgEntry; @@ -230,23 +229,6 @@ static void fw_cfg_reboot(FWCfgState *s) fw_cfg_add_file(s, "etc/boot-fail-wait", g_memdup(&reboot_timeout, 4), 4); } -static void fw_cfg_write(FWCfgState *s, uint8_t value) -{ - int arch = !!(s->cur_entry & FW_CFG_ARCH_LOCAL); - FWCfgEntry *e = &s->entries[arch][s->cur_entry & FW_CFG_ENTRY_MASK]; - - trace_fw_cfg_write(s, value); - - if (s->cur_entry & FW_CFG_WRITE_CHANNEL && e->callback && - s->cur_offset < e->len) { - e->data[s->cur_offset++] = value; - if (s->cur_offset == e->len) { - e->callback(e->callback_opaque, e->data); - s->cur_offset = 0; - } - } -} - static int fw_cfg_select(FWCfgState *s, uint16_t key) { int ret; @@ -299,17 +281,13 @@ static uint64_t fw_cfg_data_mem_read(void *opaque, hwaddr addr, static void fw_cfg_data_mem_write(void *opaque, hwaddr addr, uint64_t value, unsigned size) { - FWCfgState *s = opaque; - unsigned i = size; - - do { - fw_cfg_write(s, value >> (8 * --i)); - } while (i); +//FIXME: unused, remove from fw_cfg_data_mem_ops } static bool fw_cfg_data_mem_valid(void *opaque, hwaddr addr, unsigned size, bool is_write) { +//FIXME: additional checks before we nuke fw_cfg_data_mem_write() ? return addr == 0; } @@ -336,7 +314,7 @@ static void fw_cfg_comb_write(void *opaque, hwaddr addr, { switch (size) { case 1: - fw_cfg_write(opaque, (uint8_t)value); + //FIXME: unused, fix fw_cfg_comb_mem_ops then remove case break; case 2: fw_cfg_select(opaque, (uint16_t)value); @@ -347,6 +325,7 @@ static void fw_cfg_comb_write(void *opaque, hwaddr addr, static bool fw_cfg_comb_valid(void *opaque, hwaddr addr, unsigned size, bool is_write) { +//FIXME: update checks before removing size==1 fw_cfg_comb_write() case return (size == 1) || (is_write && size == 2); } @@ -358,6 +337,7 @@ static const MemoryRegionOps fw_cfg_ctl_mem_ops = { static const MemoryRegionOps fw_cfg_data_mem_ops = { .read = fw_cfg_data_mem_read, +//FIXME: nuke this after updating fw_cfg_data_mem_valid() .write = fw_cfg_data_mem_write, .endianness = DEVICE_BIG_ENDIAN, .valid = { @@ -458,7 +438,6 @@ static void *fw_cfg_modify_bytes_read(FWCfgState *s, uint16_t key, s->entries[arch][key].data = data; s->entries[arch][key].len = len; s->entries[arch][key].callback_opaque = NULL; - s->entries[arch][key].callback = NULL; return ptr; } @@ -502,23 +481,6 @@ void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value) fw_cfg_add_bytes(s, key, copy, sizeof(value)); } -void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, - void *callback_opaque, void *data, size_t len) -{ - int arch = !!(key & FW_CFG_ARCH_LOCAL); - - assert(key & FW_CFG_WRITE_CHANNEL); - - key &= FW_CFG_ENTRY_MASK; - - assert(key < FW_CFG_MAX_ENTRY && len <= UINT32_MAX); - - s->entries[arch][key].data = data; - s->entries[arch][key].len = (uint32_t)len; - s->entries[arch][key].callback_opaque = callback_opaque; - s->entries[arch][key].callback = callback; -} - void fw_cfg_add_file_callback(FWCfgState *s, const char *filename, FWCfgReadCallback callback, void *callback_opaque, void *data, size_t len) diff --git a/include/hw/nvram/fw_cfg.h b/include/hw/nvram/fw_cfg.h index 6d8a8ac..b2e10c2 100644 --- a/include/hw/nvram/fw_cfg.h +++ b/include/hw/nvram/fw_cfg.h @@ -69,8 +69,6 @@ void fw_cfg_add_string(FWCfgState *s, uint16_t key, const char *value); void fw_cfg_add_i16(FWCfgState *s, uint16_t key, uint16_t value); void fw_cfg_add_i32(FWCfgState *s, uint16_t key, uint32_t value); void fw_cfg_add_i64(FWCfgState *s, uint16_t key, uint64_t value); -void fw_cfg_add_callback(FWCfgState *s, uint16_t key, FWCfgCallback callback, - void *callback_opaque, void *data, size_t len); void fw_cfg_add_file(FWCfgState *s, const char *filename, void *data, size_t len); void fw_cfg_add_file_callback(FWCfgState *s, const char *filename,