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>
		
	
		
			
				
	
	
		
			374 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			374 lines
		
	
	
		
			9.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| ##
 | |
| ## This file is part of the libpayload project.
 | |
| ##
 | |
| ## Copyright (C) 2008 Advanced Micro Devices, Inc.
 | |
| ## Copyright (C) 2008 coresystems GmbH
 | |
| ##
 | |
| ## Redistribution and use in source and binary forms, with or without
 | |
| ## modification, are permitted provided that the following conditions
 | |
| ## are met:
 | |
| ## 1. Redistributions of source code must retain the above copyright
 | |
| ##    notice, this list of conditions and the following disclaimer.
 | |
| ## 2. Redistributions in binary form must reproduce the above copyright
 | |
| ##    notice, this list of conditions and the following disclaimer in the
 | |
| ##    documentation and/or other materials provided with the distribution.
 | |
| ## 3. The name of the author may not be used to endorse or promote products
 | |
| ##    derived from this software without specific prior written permission.
 | |
| ##
 | |
| ## THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 | |
| ## ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
| ## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
| ## ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 | |
| ## FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 | |
| ## DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 | |
| ## OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 | |
| ## HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 | |
| ## LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 | |
| ## OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 | |
| ## SUCH DAMAGE.
 | |
| ##
 | |
| 
 | |
| mainmenu "Libpayload Configuration"
 | |
| 
 | |
| menu "Generic Options"
 | |
| 
 | |
| config EXPERIMENTAL
 | |
| 	bool "Experimental Options"
 | |
| 	default n
 | |
| 	help
 | |
| 	  Prompt for experimental functionality. Attention: This is not likely
 | |
| 	  to work without problems
 | |
| 
 | |
| config OBSOLETE
 | |
| 	bool "Obsolete Options"
 | |
| 	default n
 | |
| 	help
 | |
| 	  Prompt for obsolete options. These options are for old, unsupported
 | |
| 	  features and are likely to go away in the future.
 | |
| 
 | |
| config DEVELOPER
 | |
| 	bool "Developer Options"
 | |
| 	default n
 | |
| 	help
 | |
| 	  Prompt for developer options. These options are only interesting for
 | |
| 	  libpayload developers.
 | |
| 
 | |
| endmenu
 | |
| 
 | |
| menu "Architecture Options"
 | |
| 
 | |
| choice
 | |
|         prompt "Target Architecture"
 | |
|         default TARGET_I386
 | |
| 
 | |
| config TARGET_I386
 | |
|         bool "x86"
 | |
|         help
 | |
|           Support the x86 architecture
 | |
| 
 | |
| config TARGET_POWERPC
 | |
|         bool "PowerPC"
 | |
|         help
 | |
| 	  Support the PowerPC architecture
 | |
| 
 | |
| endchoice
 | |
| 
 | |
| config MEMMAP_RAM_ONLY
 | |
| 	bool "Only consider RAM entries in memory map for further processing"
 | |
| 	default n
 | |
| 
 | |
| config MULTIBOOT
 | |
| 	bool "Multiboot header support"
 | |
| 	depends on TARGET_I386
 | |
| 	default y
 | |
| 
 | |
| endmenu
 | |
| 
 | |
| menu "Standard Libraries"
 | |
| 
 | |
| config LIBC
 | |
| 	bool "Enable C library support"
 | |
| 	default y
 | |
| 
 | |
| config CURSES
 | |
| 	bool "Build a curses library"
 | |
| 	default y
 | |
| 
 | |
| choice
 | |
| 	prompt "Curses implementation"
 | |
| 	default PDCURSES
 | |
| 	depends on CURSES
 | |
| 
 | |
| config TINYCURSES
 | |
| 	bool "Tinycurses"
 | |
| 	help
 | |
| 	  Tinycurses was the first curses implementation for libpayload.
 | |
| 	  It features low memory consumption, static allocation of larger
 | |
| 	  data structures (so few or no memory allocation calls) and a
 | |
| 	  reduced feature set.
 | |
| 
 | |
| config PDCURSES
 | |
| 	bool "PDCurses"
 | |
| 	default y
 | |
| 	help
 | |
| 	  libpayload's PDCurses port provides a full features curses
 | |
| 	  implementation, including libpanel, libmenu and libform (which
 | |
| 	  are taken from ncurses).
 | |
| 	  It requires more system resources, in particularily heap memory.
 | |
| 
 | |
| endchoice
 | |
| 
 | |
| config LAR
 | |
| 	bool "LAR support"
 | |
| 	default n
 | |
| 	depends on OBSOLETE
 | |
| 	help
 | |
| 	  LAR is the archive format of (obsolete) coreboot v3
 | |
| 
 | |
| config CBFS
 | |
| 	bool "CBFS support"
 | |
| 	default y
 | |
| 	help
 | |
| 	  CBFS is the archive format of coreboot
 | |
| 
 | |
| config LZMA
 | |
| 	bool "LZMA decoder"
 | |
| 	default y
 | |
| 	help
 | |
| 	  LZMA decoder implementation, usable eg. by CBFS,
 | |
| 	  but also externally.
 | |
| endmenu
 | |
| 
 | |
| menu "Console Options"
 | |
| 
 | |
| config SERIAL_CONSOLE
 | |
| 	bool "See output on the serial port console"
 | |
| 	default y
 | |
| 
 | |
| config SERIAL_IOBASE
 | |
| 	hex "I/O base for the serial port (default 0x3f8)"
 | |
| 	depends on SERIAL_CONSOLE
 | |
| 	default 0x3f8
 | |
| 
 | |
| config SERIAL_SET_SPEED
 | |
| 	bool "Override the serial console baud rate"
 | |
| 	default n
 | |
| 	depends on SERIAL_CONSOLE
 | |
| 
 | |
| config SERIAL_BAUD_RATE
 | |
| 	int "Serial console baud rate (default 115200)"
 | |
| 	depends on SERIAL_SET_SPEED
 | |
| 	default 115200
 | |
| 
 | |
| config SERIAL_ACS_FALLBACK
 | |
| 	bool "Use plain ASCII characters for ACS"
 | |
| 	default n
 | |
| 	depends on SERIAL_CONSOLE
 | |
| 	help
 | |
| 	  The alternate character set (ACS) is used for drawing lines and
 | |
| 	  displaying a couple of other special graphics characters.  The
 | |
| 	  ACS characters generally look good on screen, but can be difficult
 | |
| 	  to cut and paste from a terminal window to a text editor.
 | |
| 
 | |
| 	  Say 'y' here if you want to always use plain ASCII characters to
 | |
| 	  approximate the appearance of ACS characters on the serial port
 | |
| 	  console.
 | |
| 
 | |
| config VIDEO_CONSOLE
 | |
| 	bool "See output on a video console"
 | |
| 	default y
 | |
| 
 | |
| config VGA_VIDEO_CONSOLE
 | |
| 	bool "VGA video console driver"
 | |
| 	depends on VIDEO_CONSOLE
 | |
| 	default y
 | |
| 
 | |
| config GEODELX_VIDEO_CONSOLE
 | |
| 	bool "Geode LX video console driver"
 | |
| 	depends on VIDEO_CONSOLE
 | |
| 	default n
 | |
| 
 | |
| config COREBOOT_VIDEO_CONSOLE
 | |
| 	bool "coreboot video console driver"
 | |
| 	depends on VIDEO_CONSOLE && !GEODELX_VIDEO_CONSOLE
 | |
| 	default n
 | |
| 	help
 | |
| 	  Say Y here if coreboot switched to a graphics mode and
 | |
| 	  your payload wants to use it.
 | |
| 
 | |
| config PC_KEYBOARD
 | |
| 	bool "Allow input from a PC keyboard"
 | |
| 	default y
 | |
| 
 | |
| config PC_KEYBOARD_LAYOUT_US
 | |
| 	bool "English (US) keyboard layout"
 | |
| 	depends on PC_KEYBOARD
 | |
| 	default y
 | |
| 
 | |
| config PC_KEYBOARD_LAYOUT_DE
 | |
| 	bool "German keyboard layout"
 | |
| 	depends on PC_KEYBOARD
 | |
| 	default n
 | |
| 
 | |
| endmenu
 | |
| 
 | |
| menu "Drivers"
 | |
| 
 | |
| config PCI
 | |
| 	bool "Support for PCI devices"
 | |
| 	default y
 | |
| 
 | |
| config NVRAM
 | |
| 	bool "Support for reading/writing NVRAM bytes"
 | |
| 	default y
 | |
| 
 | |
| config RTC_PORT_EXTENDED_VIA
 | |
| 	bool "Extended RTC ports are 0x74/0x75"
 | |
| 	default n
 | |
| 	help
 | |
| 	  For recent chipsets with 256 NVRAM bytes, you have to access the
 | |
| 	  upper 128 bytes (128-255) using two different I/O ports,
 | |
| 	  usually 0x72/0x73.
 | |
| 
 | |
| 	  On some chipsets this can be a different set of ports, though.
 | |
| 	  The VIA VT8237R for example only recognizes the ports 0x74/0x75
 | |
| 	  for accessing the high 128 NVRAM bytes (as seems to be the case for
 | |
| 	  multiple VIA chipsets).
 | |
| 
 | |
| 	  If you want to read or write CMOS bytes on computers with one of
 | |
| 	  these chipsets, say 'y' here.
 | |
| 
 | |
| config SPEAKER
 | |
| 	bool "Support for PC speaker"
 | |
| 	default y
 | |
| 
 | |
| config STORAGE
 | |
| 	bool "Support for storage devices"
 | |
| 	default y
 | |
| 	help
 | |
| 	  Select this option if you want support for storage devices (like
 | |
| 	  hard drives, memory sticks or optical drives).
 | |
| 
 | |
| config STORAGE_64BIT_LBA
 | |
| 	bool "Use 64-bit integers to address sectors"
 | |
| 	depends on STORAGE
 | |
| 	default n
 | |
| 	help
 | |
| 	  If this is selected, sectors will be addressed by an 64-bit integer.
 | |
| 	  Select this to support LBA-48 for ATA drives.
 | |
| 
 | |
| config STORAGE_ATA
 | |
| 	bool "Support ATA drives (i.e. hard drives)"
 | |
| 	depends on STORAGE
 | |
| 	default y
 | |
| 	help
 | |
| 	  Select this option if you want support for ATA storage devices
 | |
| 	  (i.e. hard drives).
 | |
| 
 | |
| config STORAGE_ATAPI
 | |
| 	bool "Support ATAPI drives (i.e. optical drives)"
 | |
| 	depends on STORAGE
 | |
| 	default y
 | |
| 	select STORAGE_ATA
 | |
| 	help
 | |
| 	  Select this option if you want support for ATAPI storage devices
 | |
| 	  (i.e. optical drives like CD or DVD drives).
 | |
| 
 | |
| config STORAGE_AHCI
 | |
| 	bool "Support for AHCI host controllers"
 | |
| 	depends on STORAGE && (STORAGE_ATA || STORAGE_ATAPI) && PCI
 | |
| 	default y
 | |
| 	help
 | |
| 	  Select this option if you want support for SATA controllers in
 | |
| 	  AHCI mode.
 | |
| 
 | |
| config STORAGE_AHCI_ONLY_TESTED
 | |
| 	bool "Only enable tested controllers"
 | |
| 	depends on STORAGE_AHCI
 | |
| 	default y
 | |
| 	help
 | |
| 	  If this option is selected only AHCI controllers which are known
 | |
| 	  to work will be used.
 | |
| 
 | |
| config USB
 | |
| 	bool "USB Support"
 | |
| 	default n
 | |
| 
 | |
| config USB_UHCI
 | |
| 	bool "Support for USB UHCI controllers"
 | |
| 	depends on USB
 | |
| 	help
 | |
| 	  Select this option if you are going to use USB 1.1 on an Intel based
 | |
| 	  system.
 | |
| 
 | |
| config USB_OHCI
 | |
| 	bool "Support for USB OHCI controllers"
 | |
| 	depends on USB
 | |
| 	help
 | |
| 	  Select this option if you are going to use USB 1.1 on an AMD based
 | |
| 	  system.
 | |
| 
 | |
| config USB_EHCI
 | |
| 	bool "Support for USB EHCI controllers"
 | |
| 	depends on USB
 | |
| 	help
 | |
| 	  Select this option if you want to use USB 2.0
 | |
| 
 | |
| config USB_XHCI
 | |
| 	bool "Support for USB xHCI controllers"
 | |
| 	depends on USB
 | |
| 	help
 | |
| 	  Select this option if you want to use USB 3.0
 | |
| 	  NOTE: This option is not (fully) implemented yet
 | |
| 
 | |
| config USB_HID
 | |
| 	bool "Support for USB keyboards"
 | |
| 	depends on USB
 | |
| 	default y
 | |
| 	help
 | |
| 	  Select this option if you want to use devices complying to the
 | |
| 	  USB HID (Human Interface Device) standard. Such devices are for
 | |
| 	  example keyboards and mice. Currently only keyboards are supported.
 | |
| 	  Say Y here unless you know exactly what you are doing.
 | |
| 
 | |
| config USB_HUB
 | |
| 	bool "Support for USB hubs"
 | |
| 	depends on USB
 | |
| 	default y
 | |
| 	help
 | |
| 	  Select this option if you want to compile in support for USB hubs.
 | |
| 	  Say Y here unless you know exactly what you are doing.
 | |
| 
 | |
| config USB_MSC
 | |
| 	bool "Support for USB storage"
 | |
| 	depends on USB
 | |
| 	default y
 | |
| 	help
 | |
| 	  Select this option if you want to compile in support for USB mass
 | |
| 	  storage devices (USB memory sticks, hard drives, CDROM/DVD drives)
 | |
| 	  Say Y here unless you know exactly what you are doing.
 | |
| 
 | |
| endmenu
 | |
| 
 | |
| menu "Debugging"
 | |
| 	depends on DEVELOPER
 | |
| 
 | |
| config DEBUG_MALLOC
 | |
| 	bool "Debug memory allocator"
 | |
| 	depends on USB
 | |
| 	default n
 | |
| 	help
 | |
| 	  Select this option if you want to debug the memory allocator. This
 | |
| 	  option logs all uses of the following functions:
 | |
| 
 | |
| 	    void free(void *ptr);
 | |
| 	    void *malloc(size_t size);
 | |
| 	    void *calloc(size_t nmemb, size_t size);
 | |
| 	    void *realloc(void *ptr, size_t size);
 | |
| 	    void *memalign(size_t align, size_t size);
 | |
| 
 | |
| 	  Say N here unless you are debugging memory allocator problems.
 | |
| 
 | |
| endmenu
 | |
| 
 |