title: What kind of api does a sata hard drive expose?
body: <p>I understand that the linux kernel uses a driver to communicate with the hard disk device and that there is firmware code on the device to service the driver's requests. My questions are:</p>
  
  <ol>
  <li><p>what kind of functionality (i.e. api) does the firmware expose? For example, does it only expose an address space that the kernel manages, or is there some code in the linux kernel that deals with some of the physics related to the hard drive (i.e. data layout on track/sector/platter etc...)</p></li>
  <li><p>Does the kernel schedule the disk's head movement, or is it the firmware?</p></li>
  <li><p>Is there a standard spec for the apis exposed by hard disk devices?</p></li>
  </ol>