source: bootcd/isolinux/syslinux-6.03/core/include/bios.h

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 2.7 KB
Line 
1/*
2 * -----------------------------------------------------------------------
3 *
4 *   Copyright 1994-2008 H. Peter Anvin - All Rights Reserved
5 *
6 *   This program is free software; you can redistribute it and/or modify
7 *   it under the terms of the GNU General Public License as published by
8 *   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
9 *   Boston MA 02111-1307, USA; either version 2 of the License, or
10 *   (at your option) any later version; incorporated herein by reference.
11 *
12 * -----------------------------------------------------------------------
13 *
14 *
15 * bios.h
16 *
17 * Header file for the BIOS data structures etc.
18 */
19
20#ifndef _BIOS_H
21#define _BIOS_H
22
23#include <sys/io.h>
24
25/*
26 * Interrupt vectors
27 */
28#define BIOS_timer_hook (4 * 0x1C)
29#define fdctab          (4 * 0x1E)
30#define fdctab1         fdctab
31#define fdctab2         (fdctab + 2)
32
33#define SERIAL_BASE     0x0400  /* Base address for 4 serial ports */
34#define BIOS_fbm        0x0413  /* Free Base Memory (kilobytes) */
35#define BIOS_page       0x0462  /* Current video page */
36#define BIOS_timer      0x046C  /* Timer ticks */
37#define BIOS_magic      0x0472  /* BIOS reset magic */
38#define BIOS_vidrows    0x0484  /* Number of screen rows */
39
40static inline uint16_t bios_fbm(void)
41{
42        return *(volatile uint16_t *)BIOS_fbm;
43}
44
45static inline void set_bios_fbm(uint16_t mem)
46{
47        *(volatile uint16_t *)BIOS_fbm = mem;
48}
49
50#define serial_buf_size         4096
51#define IO_DELAY_PORT           0x80 /* Invalid port (we hope!) */
52
53static inline void io_delay(void)
54{
55        outb(0x0, IO_DELAY_PORT);
56        outb(0x0, IO_DELAY_PORT);
57}
58
59/*
60 * Sometimes we need to access screen coordinates as separate 8-bit
61 * entities and sometimes we need to use them as 16-bit entities. Using
62 * this structure allows the compiler to do it for us.
63 */
64union screen {
65        struct {
66                uint8_t col;    /* Cursor column for message file */
67                uint8_t row;    /* Cursor row for message file */
68        } b;
69        uint16_t dx;
70};
71extern union screen _cursor;
72extern union screen _screensize;
73
74#define CursorDX        _cursor.dx
75#define CursorCol       _cursor.b.col
76#define CursorRow       _cursor.b.row
77
78#define ScreenSize      _screensize.dx
79#define VidCols         _screensize.b.col
80#define VidRows         _screensize.b.row
81
82/* font.c */
83extern void use_font(void);
84extern void bios_adjust_screen(void);
85
86/* serirq.c */
87extern char *SerialHead;
88extern char *SerialTail;
89
90extern void bios_init(void);
91
92static inline uint16_t get_serial_port(uint16_t port)
93{
94    /* Magic array in BIOS memory, contains four entries */
95    const uint16_t * const serial_ports = (const uint16_t *)SERIAL_BASE;
96
97    /*
98     * If port > 3 then the port is simply the I/O base address
99     */
100    if (port > 3)
101        return port;
102
103    /* Get the I/O port from the BIOS */
104    return serial_ports[port];
105}
106
107#endif /* _BIOS_H */
Note: See TracBrowser for help on using the repository browser.