The ATAPI code has been using a table of callback functions for each command for quite a while now, this series does the same for ATA commands (which already got the table, but no function pointers, just flags)
The main advantage is that we get a more consistent behaviour of the commands because we get a clear separation between things that are common between all (or most) commands, like setting status register bits or triggering IRQs, and can be handled in one central place, and command specific code that is refactored into its own function. In the past we've had bugs from forgetting to do one of the common things, like setting the BSY flag, which will be avoided with the new infrastructure. It's also a good opportunity to clean up some of the coding style problems of the IDE code. Kevin Wolf (17): ide: Add handler to ide_cmd_table ide: Convert WIN_DSM to ide_cmd_table handler ide: Convert WIN_IDENTIFY to ide_cmd_table handler ide: Convert cmd_nop commands to ide_cmd_table handler ide: Convert verify commands to ide_cmd_table handler ide: Convert read/write multiple commands to ide_cmd_table handler ide: Convert PIO read/write commands to ide_cmd_table handler ide: Convert DMA read/write commands to ide_cmd_table handler ide: Convert READ NATIVE MAX ADDRESS to ide_cmd_table handler ide: Convert CHECK POWER MDOE to ide_cmd_table handler ide: Convert SET FEATURES to ide_cmd_table handler ide: Convert FLUSH CACHE to ide_cmd_table handler ide: Convert SEEK to ide_cmd_table handler ide: Convert ATAPI commands to ide_cmd_table handler ide: Convert CF-ATA commands to ide_cmd_table handler ide: Convert SMART commands to ide_cmd_table handler ide: Clean up ide_exec_cmd() hw/ide/core.c | 1242 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 669 insertions(+), 573 deletions(-) -- 1.8.1.4