vl.h 4.8 KB
Newer Older
B
bellard 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/*
 * QEMU System Emulator header
 * 
 * Copyright (c) 2003 Fabrice Bellard
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
#ifndef VL_H
#define VL_H

B
bellard 已提交
27 28
#include "cpu.h"

29
/* vl.c */
30
extern int reset_requested;
B
bellard 已提交
31
extern int64_t ticks_per_sec;
32

B
bellard 已提交
33 34
typedef void (IOPortWriteFunc)(struct CPUState *env, uint32_t address, uint32_t data);
typedef uint32_t (IOPortReadFunc)(struct CPUState *env, uint32_t address);
35 36 37

int register_ioport_read(int start, int length, IOPortReadFunc *func, int size);
int register_ioport_write(int start, int length, IOPortWriteFunc *func, int size);
B
bellard 已提交
38
void pic_set_irq(int irq, int level);
B
bellard 已提交
39
int64_t cpu_get_ticks(void);
40 41 42 43 44 45 46

void kbd_put_keycode(int keycode);

#define MOUSE_EVENT_LBUTTON 0x01
#define MOUSE_EVENT_RBUTTON 0x02
#define MOUSE_EVENT_MBUTTON 0x04
void kbd_mouse_event(int dx, int dy, int dz, int buttons_state);
47

B
bellard 已提交
48 49 50
/* block.c */
typedef struct BlockDriverState BlockDriverState;

51
BlockDriverState *bdrv_open(const char *filename, int snapshot);
B
bellard 已提交
52 53 54 55 56 57
void bdrv_close(BlockDriverState *bs);
int bdrv_read(BlockDriverState *bs, int64_t sector_num, 
              uint8_t *buf, int nb_sectors);
int bdrv_write(BlockDriverState *bs, int64_t sector_num, 
               const uint8_t *buf, int nb_sectors);
void bdrv_get_geometry(BlockDriverState *bs, int64_t *nb_sectors_ptr);
58
int bdrv_commit(BlockDriverState *bs);
59
void bdrv_set_boot_sector(BlockDriverState *bs, const uint8_t *data, int size);
60 61 62 63

/* user mode linux compatible COW file */
#define COW_MAGIC 0x4f4f4f4d  /* MOOO */
#define COW_VERSION 2
B
bellard 已提交
64

65 66
struct cow_header_v2 {
    uint32_t magic;
B
bellard 已提交
67
    uint32_t version;
68 69 70 71 72
    char backing_file[1024];
    int32_t mtime;
    uint64_t size;
    uint32_t sectorsize;
};
B
bellard 已提交
73

74 75
/* vga.c */

B
bellard 已提交
76
#define VGA_RAM_SIZE (4096 * 1024)
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

typedef struct DisplayState {
    uint8_t *data;
    int linesize;
    int depth;
    void (*dpy_update)(struct DisplayState *s, int x, int y, int w, int h);
    void (*dpy_resize)(struct DisplayState *s, int w, int h);
    void (*dpy_refresh)(struct DisplayState *s);
} DisplayState;

static inline void dpy_update(DisplayState *s, int x, int y, int w, int h)
{
    s->dpy_update(s, x, y, w, h);
}

static inline void dpy_resize(DisplayState *s, int w, int h)
{
    s->dpy_resize(s, w, h);
}

B
bellard 已提交
97 98
int vga_initialize(DisplayState *ds, uint8_t *vga_ram_base, 
                   unsigned long vga_ram_offset, int vga_ram_size);
99 100 101 102 103
void vga_update_display(void);

/* sdl.c */
void sdl_display_init(DisplayState *ds);

B
bellard 已提交
104 105 106 107 108 109 110 111 112
/* ide.c */
#define MAX_DISKS 4

extern BlockDriverState *bs_table[MAX_DISKS];

void ide_init(void);
void ide_set_geometry(int n, int cyls, int heads, int secs);
void ide_set_cdrom(int n, int is_cdrom);

B
bellard 已提交
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
/* oss.c */
typedef enum {
  AUD_FMT_U8,
  AUD_FMT_S8,
  AUD_FMT_U16,
  AUD_FMT_S16
} audfmt_e;

void AUD_open (int rfreq, int rnchannels, audfmt_e rfmt);
void AUD_reset (int rfreq, int rnchannels, audfmt_e rfmt);
int AUD_write (void *in_buf, int size);
void AUD_run (void);
void AUD_adjust_estimate (int _leftover);
int AUD_get_free (void);
int AUD_get_live (void);
int AUD_get_buffer_size (void);
void AUD_init (void);

/* dma.c */
B
bellard 已提交
132
typedef int (*DMA_transfer_handler) (void *opaque, target_ulong addr, int size);
B
bellard 已提交
133 134 135
int DMA_get_channel_mode (int nchan);
void DMA_hold_DREQ (int nchan);
void DMA_release_DREQ (int nchan);
B
bellard 已提交
136
void DMA_schedule(int nchan);
B
bellard 已提交
137 138 139
void DMA_run (void);
void DMA_init (void);
void DMA_register_channel (int nchan,
B
bellard 已提交
140
                           DMA_transfer_handler transfer_handler, void *opaque);
B
bellard 已提交
141 142 143 144 145

/* sb16.c */
void SB16_run (void);
void SB16_init (void);
 
B
bellard 已提交
146 147 148 149 150 151 152 153 154
/* fdc.c */
#define MAX_FD 2
extern BlockDriverState *fd_table[MAX_FD];

void cmos_register_fd (uint8_t fd0, uint8_t fd1);
void fdctrl_init (int irq_lvl, int dma_chann, int mem_mapped, uint32_t base,
                  char boot_device);
int fdctrl_disk_change (int idx, const unsigned char *filename, int ro);

B
bellard 已提交
155
#endif /* VL_H */