OSDN Git Service

ide: Clean up ide_exec_cmd()
authorKevin Wolf <kwolf@redhat.com>
Tue, 18 Jun 2013 08:26:11 +0000 (10:26 +0200)
committerStefan Hajnoczi <stefanha@redhat.com>
Mon, 24 Jun 2013 08:25:16 +0000 (10:25 +0200)
All commands are now converted to ide_cmd_table handlers, so it can be
unconditional now and the old switch block can go.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
hw/ide/core.c

index 1c8f414..03d1cfa 100644 (file)
@@ -1694,6 +1694,7 @@ static bool ide_cmd_permitted(IDEState *s, uint32_t cmd)
 void ide_exec_cmd(IDEBus *bus, uint32_t val)
 {
     IDEState *s;
+    bool complete;
 
 #if defined(DEBUG_IDE)
     printf("ide: CMD=%02x\n", val);
@@ -1708,37 +1709,24 @@ void ide_exec_cmd(IDEBus *bus, uint32_t val)
         return;
 
     if (!ide_cmd_permitted(s, val)) {
-        goto abort_cmd;
+        ide_abort_command(s);
+        ide_set_irq(s->bus);
+        return;
     }
 
-    if (ide_cmd_table[val].handler != NULL) {
-        bool complete;
-
-        s->status = READY_STAT | BUSY_STAT;
-        s->error = 0;
-
-        complete = ide_cmd_table[val].handler(s, val);
-        if (complete) {
-            s->status &= ~BUSY_STAT;
-            assert(!!s->error == !!(s->status & ERR_STAT));
+    s->status = READY_STAT | BUSY_STAT;
+    s->error = 0;
 
-            if ((ide_cmd_table[val].flags & SET_DSC) && !s->error) {
-                s->status |= SEEK_STAT;
-            }
+    complete = ide_cmd_table[val].handler(s, val);
+    if (complete) {
+        s->status &= ~BUSY_STAT;
+        assert(!!s->error == !!(s->status & ERR_STAT));
 
-            ide_set_irq(s->bus);
+        if ((ide_cmd_table[val].flags & SET_DSC) && !s->error) {
+            s->status |= SEEK_STAT;
         }
 
-        return;
-    }
-
-    switch(val) {
-    default:
-        /* should not be reachable */
-    abort_cmd:
-        ide_abort_command(s);
         ide_set_irq(s->bus);
-        break;
     }
 }