[SeaBIOS] [PATCH] ahci: set transfer mode according to the capabilities of connected drive
Kevin O'Connor
kevin at koconnor.net
Sat Feb 20 18:05:01 CET 2016
On Sat, Feb 20, 2016 at 03:20:15PM +0100, Gerd Hoffmann wrote:
> Use case: cf cards behind sata-ide bridge, which might not support
> the default transfer mode.
>
> Based on a patch by Werner Zeh <werner.zeh at siemens.com>,
> with some minor tweaks applied.
>
> Signed-off-by: Gerd Hoffmann <kraxel at redhat.com>
> ---
> src/hw/ahci.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> src/hw/ata.h | 5 +++++
> 2 files changed, 63 insertions(+)
>
> diff --git a/src/hw/ahci.c b/src/hw/ahci.c
> index 9310850..ea862f2 100644
> --- a/src/hw/ahci.c
> +++ b/src/hw/ahci.c
> @@ -515,6 +515,64 @@ static int ahci_port_setup(struct ahci_port_s *port)
> , ata_extract_version(buffer)
> , (u32)adjsize, adjprefix);
> port->prio = bootprio_find_ata_device(ctrl->pci_tmp, pnr, 0);
> +
> + s8 multi_dma = -1;
> + s8 pio_mode = -1;
> + s8 udma_mode = -1;
> + // If bit 2 in word 53 is set, udma information is valid in word 88.
> + if (buffer[53] & 0x04) {
> + udma_mode = 6;
> + while ((udma_mode >= 0) &&
> + !((buffer[88] & 0x7f) & ( 1 << udma_mode ))) {
> + udma_mode--;
> + }
> + }
> + // If bit 1 in word 53 is set, multiword-dma and advanced pio modes
> + // are available in words 63 and 64.
> + if (buffer[53] & 0x02) {
> + pio_mode = 4;
> + multi_dma = 3;
> + while ((multi_dma >= 0) &&
> + !((buffer[63] & 0x7) & ( 1 << multi_dma ))) {
> + multi_dma--;
> + }
This indentation should be fixed.
Otherwise, looks good to me.
-Kevin
More information about the SeaBIOS
mailing list