This is akin to the decision that was made for the networking. The upper
layers assume every driver is the ultimate supersmart control unit. If its
not the driver calls back into what is effectively library code to implement
the smarts.
For a slower device you are executing the same amount of code as before, but
something like a very high end smart scsi controller doesnt need to take
the hit of the generic scsi goings on, the disk queue scheduling and other
stuff it would rather do itself.
I am more convinced than ever that this is the right model for all species
of device driver