From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:42227) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QCoz2-0002kA-0b for qemu-devel@nongnu.org; Thu, 21 Apr 2011 04:11:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1QCoz1-0000rh-1U for qemu-devel@nongnu.org; Thu, 21 Apr 2011 04:11:27 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56571) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1QCoz0-0000rb-JW for qemu-devel@nongnu.org; Thu, 21 Apr 2011 04:11:27 -0400 Message-ID: <4DAFE737.8070601@redhat.com> Date: Thu, 21 Apr 2011 10:13:43 +0200 From: Kevin Wolf MIME-Version: 1.0 References: <1303299015-11036-1-git-send-email-kwolf@redhat.com> <1303299015-11036-4-git-send-email-kwolf@redhat.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 3/5] ide/atapi: Use table instead of switch for commands List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Blue Swirl Cc: qemu-devel@nongnu.org Am 20.04.2011 20:13, schrieb Blue Swirl: > On Wed, Apr 20, 2011 at 2:30 PM, Kevin Wolf wrote: >> Signed-off-by: Kevin Wolf >> --- >> hw/ide/atapi.c | 115 +++++++++++++++++++++++-------------------------------- >> 1 files changed, 48 insertions(+), 67 deletions(-) >> >> diff --git a/hw/ide/atapi.c b/hw/ide/atapi.c >> index d161bf7..d0bf7fd 100644 >> --- a/hw/ide/atapi.c >> +++ b/hw/ide/atapi.c >> @@ -533,10 +533,11 @@ static unsigned int event_status_media(IDEState *s, >> return 8; /* We wrote to 4 extra bytes from the header */ >> } >> >> -static void handle_get_event_status_notification(IDEState *s, >> - uint8_t *buf, >> - const uint8_t *packet) >> +static void cmd_get_event_status_notification(IDEState *s, >> + uint8_t *buf) >> { >> + const uint8_t *packet = buf; >> + >> struct { >> uint8_t opcode; >> uint8_t polled; /* lsb bit is polled; others are reserved */ >> @@ -1064,6 +1065,38 @@ static void cmd_set_speed(IDEState *s, uint8_t* buf) >> ide_atapi_cmd_ok(s); >> } >> >> +enum { >> + /* >> + * Only commands flagged as ALLOW_UA are allowed to run under a >> + * unit attention condition. (See MMC-5, section 4.1.6.1) >> + */ >> + ALLOW_UA = 0x01, >> +}; >> + >> +struct { >> + void (*handler)(IDEState *s, uint8_t *buf); >> + int flags; >> +} atapi_cmd_table[0x100] = { >> + [ 0x00 ] = { cmd_test_unit_ready, 0 }, > > How about using symbols here, like > [ GPCMD_TEST_UNIT_READY ] = { cmd_test_unit_ready, 0 }, > ? I avoided symbols intentionally. In fact, I'm even considering to remove the symbols from the header file because most of them are unused now (and it should be easy enough to get rid of the rest of them so that the only occurrence of the literal opcode is in the table). The point here is that this table contains all the information about a command in one place. If you used symbols, you would have the command name twice, and the opcode would be missing. So not using symbolic constants but rather literal opcodes improves readability in this case. > The table can probably be static const. Right, will fix. Kevin