1*58a2b000SEvgeniy Ivanov/* $NetBSD: biosmemps2.S,v 1.6 2011/06/16 13:27:59 joerg Exp $ */ 2*58a2b000SEvgeniy Ivanov 3*58a2b000SEvgeniy Ivanov/*- 4*58a2b000SEvgeniy Ivanov * Copyright (c) 2003 The NetBSD Foundation, Inc. 5*58a2b000SEvgeniy Ivanov * All rights reserved. 6*58a2b000SEvgeniy Ivanov * 7*58a2b000SEvgeniy Ivanov * This code is derived from software contributed to The NetBSD Foundation 8*58a2b000SEvgeniy Ivanov * by Jaromir Dolecek. 9*58a2b000SEvgeniy Ivanov * 10*58a2b000SEvgeniy Ivanov * Redistribution and use in source and binary forms, with or without 11*58a2b000SEvgeniy Ivanov * modification, are permitted provided that the following conditions 12*58a2b000SEvgeniy Ivanov * are met: 13*58a2b000SEvgeniy Ivanov * 1. Redistributions of source code must retain the above copyright 14*58a2b000SEvgeniy Ivanov * notice, this list of conditions and the following disclaimer. 15*58a2b000SEvgeniy Ivanov * 2. Redistributions in binary form must reproduce the above copyright 16*58a2b000SEvgeniy Ivanov * notice, this list of conditions and the following disclaimer in the 17*58a2b000SEvgeniy Ivanov * documentation and/or other materials provided with the distribution. 18*58a2b000SEvgeniy Ivanov * 19*58a2b000SEvgeniy Ivanov * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20*58a2b000SEvgeniy Ivanov * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21*58a2b000SEvgeniy Ivanov * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22*58a2b000SEvgeniy Ivanov * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23*58a2b000SEvgeniy Ivanov * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*58a2b000SEvgeniy Ivanov * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*58a2b000SEvgeniy Ivanov * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*58a2b000SEvgeniy Ivanov * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*58a2b000SEvgeniy Ivanov * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*58a2b000SEvgeniy Ivanov * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*58a2b000SEvgeniy Ivanov * POSSIBILITY OF SUCH DAMAGE. 30*58a2b000SEvgeniy Ivanov */ 31*58a2b000SEvgeniy Ivanov 32*58a2b000SEvgeniy Ivanov#include <machine/asm.h> 33*58a2b000SEvgeniy Ivanov 34*58a2b000SEvgeniy Ivanov .text 35*58a2b000SEvgeniy Ivanov 36*58a2b000SEvgeniy Ivanov/* int getextmemp2(void buffer) 37*58a2b000SEvgeniy Ivanov call int 15 function 0xc7 - later PS/2s - RETURN MEMORY-MAP INFORMATION 38*58a2b000SEvgeniy Ivanov return: 0=OK, nonzero=error 39*58a2b000SEvgeniy Ivanov buffer: filled with memory-map table structure 40*58a2b000SEvgeniy Ivanov*/ 41*58a2b000SEvgeniy IvanovENTRY(getextmemps2) 42*58a2b000SEvgeniy Ivanov .code32 43*58a2b000SEvgeniy Ivanov movl %eax, %edx 44*58a2b000SEvgeniy Ivanov xorl %eax, %eax 45*58a2b000SEvgeniy Ivanov pusha 46*58a2b000SEvgeniy Ivanov 47*58a2b000SEvgeniy Ivanov call _C_LABEL(prot_to_real) 48*58a2b000SEvgeniy Ivanov .code16 49*58a2b000SEvgeniy Ivanov 50*58a2b000SEvgeniy Ivanov # do int15, function 0xc0 call to discover if C7h is supported 51*58a2b000SEvgeniy Ivanov movb $0xc0, %ah 52*58a2b000SEvgeniy Ivanov int $0x15 53*58a2b000SEvgeniy Ivanov setc %cl 54*58a2b000SEvgeniy Ivanov jc out # 0xc0 not supported if carry set 55*58a2b000SEvgeniy Ivanov 56*58a2b000SEvgeniy Ivanov # check feature byte 2, bit 4 to see if return memory map is supported 57*58a2b000SEvgeniy Ivanov movb %es:6(%bx), %al 58*58a2b000SEvgeniy Ivanov andb $0x10, %al 59*58a2b000SEvgeniy Ivanov jnz getmem # 0xc7 supported 60*58a2b000SEvgeniy Ivanov 61*58a2b000SEvgeniy Ivanov # set %cl to indicate failure, and exit 62*58a2b000SEvgeniy Ivanov movb $2, %cl 63*58a2b000SEvgeniy Ivanov jmp out 64*58a2b000SEvgeniy Ivanov 65*58a2b000SEvgeniy Ivanovgetmem: 66*58a2b000SEvgeniy Ivanov # move the parameter to right register 67*58a2b000SEvgeniy Ivanov push %ds 68*58a2b000SEvgeniy Ivanov movl %edx, %esi 69*58a2b000SEvgeniy Ivanov andl $0xf, %esi 70*58a2b000SEvgeniy Ivanov shrl $4, %edx 71*58a2b000SEvgeniy Ivanov mov %ds, %ax 72*58a2b000SEvgeniy Ivanov add %dx, %ax 73*58a2b000SEvgeniy Ivanov mov %ax, %ds 74*58a2b000SEvgeniy Ivanov 75*58a2b000SEvgeniy Ivanov # actually call int15, function 0xc7 now 76*58a2b000SEvgeniy Ivanov movb $0xc7, %ah 77*58a2b000SEvgeniy Ivanov int $0x15 78*58a2b000SEvgeniy Ivanov setc %cl # save carry 79*58a2b000SEvgeniy Ivanov pop %ds 80*58a2b000SEvgeniy Ivanov 81*58a2b000SEvgeniy Ivanovout: 82*58a2b000SEvgeniy Ivanov calll _C_LABEL(real_to_prot) 83*58a2b000SEvgeniy Ivanov .code32 84*58a2b000SEvgeniy Ivanov 85*58a2b000SEvgeniy Ivanov movb %cl, 28(%esp) 86*58a2b000SEvgeniy Ivanov popa 87*58a2b000SEvgeniy Ivanov ret 88