I'm afraid you are the one who is wrong. The IDE layer is duplicating aWhat IDE indirection you're talking about anyway?
generic level of indirection with its own code - purely because IDE
pre-dates that core functionality. The whole IDE layer indirection can go
away because Linux has caught up with the needs of the IDE layer.
As I said earlier ide_mm_inb etc via the function pointers tf_inb/tf_outb
etc.
Given how small those functions are it might even be worth rolling them
into two different versions of the functions like ide_tf_read as surely
it costs more to call them (in size) than to inline the two for those
functions?