On Tue, Jun 18, 2013 at 10:25:55AM +0200, Kevin Wolf wrote: > As a preparation for moving all IDE commands into their own function > like in the ATAPI code, introduce a 'handler' callback to ide_cmd_table. > > Commands using this new infrastructure get some things handled > automatically: > > * The BSY flag is set before calling the handler (in order to avoid bugs > like the one fixed in f68ec837) and reset on completion. > > * The (obsolete) DSC flag in the status register is set on completion if > the command is flagged with SET_DSC in the command table > > * An IRQ is triggered on completion. > > * The error register and the ERR flag in the status register are cleared > before calling the handler and on completion it is asserted that > either none or both of them are set. > > No commands are converted at this point. > > Signed-off-by: Kevin Wolf <kw...@redhat.com> > --- > hw/ide/core.c | 144 > +++++++++++++++++++++++++++++++++++----------------------- > 1 file changed, 86 insertions(+), 58 deletions(-) > > diff --git a/hw/ide/core.c b/hw/ide/core.c > index 9926d92..cd9de14 100644 > --- a/hw/ide/core.c > +++ b/hw/ide/core.c > @@ -1010,71 +1010,78 @@ void ide_ioport_write(void *opaque, uint32_t addr, > uint32_t val) > #define HD_CFA_OK (HD_OK | CFA_OK) > #define ALL_OK (HD_OK | CD_OK | CFA_OK) > > +/* Set the Disk Seek Completed status bit during completion */ > +#define SET_DSC (1u << 8)
If DriveKind changes there could be unnoticed collisions and in the meantime we have empty flags bits... Creating a single IDEHandlerFlags enum would still depend on IDEDriveKind constants so I don't see a nicer solution than what you've done. We can live with this.