libpayload: New AHCI, ATA and ATAPI drivers

This adds a new interface for storage devices. A driver for ATA and
ATAPI drives on AHCI host controllers comes along.

The interface is very simple and was designed to match FILO's needs.
It consists of three functions:

  void storage_initialize(void);
  Initializes controllers. Should be called once at startup.

  storage_poll_t storage_probe(size_t dev_num);
     with typedef enum {
            POLL_NO_DEVICE      = -2,
            POLL_ERROR          = -1,
            POLL_NO_MEDIUM      =  0,
            POLL_MEDIUM_PRESENT =  1,
          } storage_poll_t;
  Looks for a drive with number dev_num (drives are counted from
  zero) and polls for a medium in the drive if appropriate.

  int storage_read_blocks512(size_t dev_num,
                             u64 start, size_t count,
                             unsigned char *buf);
  Reads count blocks of 512 bytes from block start of drive dev_num
  into buf.

Change-Id: I1c85796b7f8e379ff3817a61b1837636b57e182b
Signed-off-by: Nico Huber <nico.huber@secunet.com>
Reviewed-on: http://review.coreboot.org/1622
Tested-by: build bot (Jenkins)
Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
Reviewed-by: Peter Stuge <peter@stuge.se>
diff --git a/payloads/libpayload/drivers/Makefile.inc b/payloads/libpayload/drivers/Makefile.inc
index 360a258..80c9a5b 100644
--- a/payloads/libpayload/drivers/Makefile.inc
+++ b/payloads/libpayload/drivers/Makefile.inc
@@ -52,6 +52,11 @@
 libc-$(CONFIG_COREBOOT_VIDEO_CONSOLE) += video/corebootfb.c
 libc-$(CONFIG_COREBOOT_VIDEO_CONSOLE) += video/font8x16.c
 
+libc-$(CONFIG_STORAGE) += storage/storage.c
+libc-$(CONFIG_STORAGE_ATA) += storage/ata.c
+libc-$(CONFIG_STORAGE_ATAPI) += storage/atapi.c
+libc-$(CONFIG_STORAGE_AHCI) += storage/ahci.c
+
 # USB stack
 libc-$(CONFIG_USB) += usb/usbinit.c
 libc-$(CONFIG_USB) += usb/usb.c