Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 337496eb authored by H. Peter Anvin's avatar H. Peter Anvin Committed by Linus Torvalds
Browse files

Voyager support for the new x86 setup code



Voyager support for the new x86 setup code.  This implements the same
functionality as the assembly version.

Signed-off-by: default avatarH. Peter Anvin <hpa@zytor.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 449f2ab9
Loading
Loading
Loading
Loading
+46 −0
Original line number Diff line number Diff line
/* -*- linux-c -*- ------------------------------------------------------- *
 *
 *   Copyright (C) 1991, 1992 Linus Torvalds
 *   Copyright 2007 rPath, Inc. - All Rights Reserved
 *
 *   This file is part of the Linux kernel, and is made available under
 *   the terms of the GNU General Public License version 2.
 *
 * ----------------------------------------------------------------------- */

/*
 * arch/i386/boot/voyager.c
 *
 * Get the Voyager config information
 */

#include "boot.h"

#ifdef CONFIG_X86_VOYAGER

int query_voyager(void)
{
	u8 err;
	u16 es, di;
	/* Abuse the apm_bios_info area for this */
	u8 *data_ptr = (u8 *)&boot_params.apm_bios_info;

	data_ptr[0] = 0xff;	/* Flag on config not found(?) */

	asm("pushw %%es ; "
	    "int $0x15 ; "
	    "setc %0 ; "
	    "movw %%es, %1 ; "
	    "popw %%es"
	    : "=qm" (err), "=rm" (es), "=D" (di)
	    : "a" (0xffc0));

	if (err)
		return -1;	/* Not Voyager */

	set_fs(es);
	copy_from_fs(data_ptr, di, 7);	/* Table is 7 bytes apparently */
	return 0;
}

#endif /* CONFIG_X86_VOYAGER */