1*84d9c625SLionel Sambuc /* $NetBSD: libi386.h,v 1.40 2013/11/24 17:20:00 jakllsch Exp $ */ 258a2b000SEvgeniy Ivanov 358a2b000SEvgeniy Ivanov /* 458a2b000SEvgeniy Ivanov * Copyright (c) 1996 558a2b000SEvgeniy Ivanov * Matthias Drochner. All rights reserved. 658a2b000SEvgeniy Ivanov * 758a2b000SEvgeniy Ivanov * Redistribution and use in source and binary forms, with or without 858a2b000SEvgeniy Ivanov * modification, are permitted provided that the following conditions 958a2b000SEvgeniy Ivanov * are met: 1058a2b000SEvgeniy Ivanov * 1. Redistributions of source code must retain the above copyright 1158a2b000SEvgeniy Ivanov * notice, this list of conditions and the following disclaimer. 1258a2b000SEvgeniy Ivanov * 2. Redistributions in binary form must reproduce the above copyright 1358a2b000SEvgeniy Ivanov * notice, this list of conditions and the following disclaimer in the 1458a2b000SEvgeniy Ivanov * documentation and/or other materials provided with the distribution. 1558a2b000SEvgeniy Ivanov * 1658a2b000SEvgeniy Ivanov * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1758a2b000SEvgeniy Ivanov * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1858a2b000SEvgeniy Ivanov * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1958a2b000SEvgeniy Ivanov * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2058a2b000SEvgeniy Ivanov * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2158a2b000SEvgeniy Ivanov * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2258a2b000SEvgeniy Ivanov * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2358a2b000SEvgeniy Ivanov * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2458a2b000SEvgeniy Ivanov * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2558a2b000SEvgeniy Ivanov * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2658a2b000SEvgeniy Ivanov * 2758a2b000SEvgeniy Ivanov */ 2858a2b000SEvgeniy Ivanov 2958a2b000SEvgeniy Ivanov typedef unsigned long physaddr_t; 3058a2b000SEvgeniy Ivanov 3158a2b000SEvgeniy Ivanov /* this is in startup code */ 3258a2b000SEvgeniy Ivanov void vpbcopy(const void *, void *, size_t); 3358a2b000SEvgeniy Ivanov void pvbcopy(const void *, void *, size_t); 3458a2b000SEvgeniy Ivanov void pbzero(void *, size_t); 3558a2b000SEvgeniy Ivanov physaddr_t vtophys(void *); 3658a2b000SEvgeniy Ivanov 3758a2b000SEvgeniy Ivanov ssize_t pread(int, void *, size_t); 38*84d9c625SLionel Sambuc void startprog(physaddr_t, uint32_t, uint32_t *, physaddr_t); 3958a2b000SEvgeniy Ivanov void multiboot(physaddr_t, physaddr_t, physaddr_t); 4058a2b000SEvgeniy Ivanov 4158a2b000SEvgeniy Ivanov int exec_netbsd(const char *, physaddr_t, int, int, void (*)(void)); 4258a2b000SEvgeniy Ivanov int exec_multiboot(const char *, char *); 4358a2b000SEvgeniy Ivanov 4458a2b000SEvgeniy Ivanov void delay(int); 4558a2b000SEvgeniy Ivanov int getbasemem(void); 4658a2b000SEvgeniy Ivanov int getextmemx(void); 4758a2b000SEvgeniy Ivanov int getextmem1(void); 4858a2b000SEvgeniy Ivanov int biosvideomode(void); 4958a2b000SEvgeniy Ivanov #ifdef CONSERVATIVE_MEMDETECT 5058a2b000SEvgeniy Ivanov #define getextmem() getextmem1() 5158a2b000SEvgeniy Ivanov #else 5258a2b000SEvgeniy Ivanov #define getextmem() getextmemx() 5358a2b000SEvgeniy Ivanov #endif 5458a2b000SEvgeniy Ivanov void printmemlist(void); 5558a2b000SEvgeniy Ivanov void reboot(void); 5658a2b000SEvgeniy Ivanov void gateA20(void); 5758a2b000SEvgeniy Ivanov 5858a2b000SEvgeniy Ivanov void clear_pc_screen(void); 5958a2b000SEvgeniy Ivanov void initio(int); 6058a2b000SEvgeniy Ivanov #define CONSDEV_PC 0 6158a2b000SEvgeniy Ivanov #define CONSDEV_COM0 1 6258a2b000SEvgeniy Ivanov #define CONSDEV_COM1 2 6358a2b000SEvgeniy Ivanov #define CONSDEV_COM2 3 6458a2b000SEvgeniy Ivanov #define CONSDEV_COM3 4 6558a2b000SEvgeniy Ivanov #define CONSDEV_COM0KBD 5 6658a2b000SEvgeniy Ivanov #define CONSDEV_COM1KBD 6 6758a2b000SEvgeniy Ivanov #define CONSDEV_COM2KBD 7 6858a2b000SEvgeniy Ivanov #define CONSDEV_COM3KBD 8 6958a2b000SEvgeniy Ivanov #define CONSDEV_AUTO (-1) 7058a2b000SEvgeniy Ivanov int iskey(int); 7158a2b000SEvgeniy Ivanov char awaitkey(int, int); 7258a2b000SEvgeniy Ivanov void wait_sec(int); 7358a2b000SEvgeniy Ivanov 7458a2b000SEvgeniy Ivanov /* this is in "user code"! */ 7558a2b000SEvgeniy Ivanov int parsebootfile(const char *, char **, char **, int *, int *, const char **); 7658a2b000SEvgeniy Ivanov 7758a2b000SEvgeniy Ivanov #ifdef XMS 7858a2b000SEvgeniy Ivanov physaddr_t ppbcopy(physaddr_t, physaddr_t, int); 7958a2b000SEvgeniy Ivanov int checkxms(void); 8058a2b000SEvgeniy Ivanov physaddr_t xmsalloc(int); 8158a2b000SEvgeniy Ivanov #endif 8258a2b000SEvgeniy Ivanov 8358a2b000SEvgeniy Ivanov /* parseutils.c */ 8458a2b000SEvgeniy Ivanov char *gettrailer(char *); 8558a2b000SEvgeniy Ivanov int parseopts(const char *, int *); 8658a2b000SEvgeniy Ivanov int parseboot(char *, char **, int *); 8758a2b000SEvgeniy Ivanov 8858a2b000SEvgeniy Ivanov /* menuutils.c */ 8958a2b000SEvgeniy Ivanov struct bootblk_command { 9058a2b000SEvgeniy Ivanov const char *c_name; 9158a2b000SEvgeniy Ivanov void (*c_fn)(char *); 9258a2b000SEvgeniy Ivanov }; 9358a2b000SEvgeniy Ivanov void bootmenu(void); 9458a2b000SEvgeniy Ivanov void docommand(char *); 95f14fb602SLionel Sambuc #if defined(__minix) 969733fcdbSDavid van Moolenbroek void editline(char *, size_t, char *); 97f14fb602SLionel Sambuc void prompt(int); 98*84d9c625SLionel Sambuc #endif /* defined(__minix) */ 9958a2b000SEvgeniy Ivanov 10058a2b000SEvgeniy Ivanov /* in "user code": */ 10158a2b000SEvgeniy Ivanov void command_help(char *); 10258a2b000SEvgeniy Ivanov extern const struct bootblk_command commands[]; 10358a2b000SEvgeniy Ivanov 10458a2b000SEvgeniy Ivanov /* asm bios/dos calls */ 10558a2b000SEvgeniy Ivanov __compactcall int biosdisk_extread(int, void *); 10658a2b000SEvgeniy Ivanov int biosdisk_read(int, int, int, int, int, void *); 10758a2b000SEvgeniy Ivanov __compactcall int biosdisk_reset(int); 10858a2b000SEvgeniy Ivanov 10958a2b000SEvgeniy Ivanov __compactcall int biosgetrtc(u_long *); 11058a2b000SEvgeniy Ivanov int biosgetsystime(void); 11158a2b000SEvgeniy Ivanov int comgetc(int); 11258a2b000SEvgeniy Ivanov void cominit(int); 11358a2b000SEvgeniy Ivanov __compactcall int computc(int, int); 11458a2b000SEvgeniy Ivanov int comstatus(int); 11558a2b000SEvgeniy Ivanov int congetc(void); 11658a2b000SEvgeniy Ivanov int conisshift(void); 11758a2b000SEvgeniy Ivanov int coniskey(void); 11858a2b000SEvgeniy Ivanov __compactcall void conputc(int); 11958a2b000SEvgeniy Ivanov void conclr(void); 12058a2b000SEvgeniy Ivanov 121f14fb602SLionel Sambuc #if defined(__minix) 1229733fcdbSDavid van Moolenbroek int getchar_ex(void); 123*84d9c625SLionel Sambuc #endif /* defined(__minix) */ 1249733fcdbSDavid van Moolenbroek 12558a2b000SEvgeniy Ivanov int getextmem2(int *); 12658a2b000SEvgeniy Ivanov __compactcall int getextmemps2(void *); 12758a2b000SEvgeniy Ivanov int getmementry(int *, int *); 12858a2b000SEvgeniy Ivanov 12958a2b000SEvgeniy Ivanov __compactcall int biosdisk_int13ext(int); 13058a2b000SEvgeniy Ivanov __compactcall int biosdisk_getinfo(int); 13158a2b000SEvgeniy Ivanov struct biosdisk_extinfo; 13258a2b000SEvgeniy Ivanov __compactcall int biosdisk_getextinfo(int, struct biosdisk_extinfo *); 13358a2b000SEvgeniy Ivanov int get_harddrives(void); 13458a2b000SEvgeniy Ivanov void biosdisk_probe(void); 13558a2b000SEvgeniy Ivanov 13658a2b000SEvgeniy Ivanov int pcibios_cfgread(unsigned int, int, int *); 13758a2b000SEvgeniy Ivanov int pcibios_cfgwrite(unsigned int, int, int); 13858a2b000SEvgeniy Ivanov int pcibios_finddev(int, int, int, unsigned int *); 13958a2b000SEvgeniy Ivanov int pcibios_present(int *); 14058a2b000SEvgeniy Ivanov 14158a2b000SEvgeniy Ivanov void dosclose(int); 14258a2b000SEvgeniy Ivanov int dosopen(char *); 14358a2b000SEvgeniy Ivanov int dosread(int, char *, int); 14458a2b000SEvgeniy Ivanov int dosseek(int, int, int); 14558a2b000SEvgeniy Ivanov extern int doserrno; /* in dos_file.S */ 14658a2b000SEvgeniy Ivanov 14758a2b000SEvgeniy Ivanov void module_add(char *); 14858a2b000SEvgeniy Ivanov void splash_add(char *); 14958a2b000SEvgeniy Ivanov void rnd_add(char *); 150*84d9c625SLionel Sambuc void fs_add(char *); 15158a2b000SEvgeniy Ivanov void userconf_add(char *); 15258a2b000SEvgeniy Ivanov 15358a2b000SEvgeniy Ivanov struct btinfo_framebuffer; 15458a2b000SEvgeniy Ivanov void framebuffer_configure(struct btinfo_framebuffer *); 155