isa.h 2.8 KB
Newer Older
1 2
#ifndef HW_ISA_H
#define HW_ISA_H
3

P
pbrook 已提交
4 5
/* ISA bus */

6
#include "ioport.h"
A
Avi Kivity 已提交
7
#include "memory.h"
8 9
#include "qdev.h"

J
Jan Kiszka 已提交
10 11
#define ISA_NUM_IRQS 16

12 13 14
typedef struct ISADevice ISADevice;
typedef struct ISADeviceInfo ISADeviceInfo;

15 16 17 18 19 20
struct ISABus {
    BusState qbus;
    MemoryRegion *address_space_io;
    qemu_irq *irqs;
};

21 22
struct ISADevice {
    DeviceState qdev;
G
Gerd Hoffmann 已提交
23
    uint32_t isairq[2];
24
    int nirqs;
25
    int ioport_id;
26 27
};

28
typedef int (*isa_qdev_initfn)(ISADevice *dev);
29 30 31 32 33
struct ISADeviceInfo {
    DeviceInfo qdev;
    isa_qdev_initfn init;
};

34
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space_io);
35 36
void isa_bus_irqs(ISABus *bus, qemu_irq *irqs);
qemu_irq isa_get_irq(ISADevice *dev, int isairq);
37
void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq);
38
void isa_qdev_register(ISADeviceInfo *info);
A
Avi Kivity 已提交
39
MemoryRegion *isa_address_space(ISADevice *dev);
40 41 42
ISADevice *isa_create(ISABus *bus, const char *name);
ISADevice *isa_try_create(ISABus *bus, const char *name);
ISADevice *isa_create_simple(ISABus *bus, const char *name);
P
pbrook 已提交
43

A
Avi Kivity 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
/**
 * isa_register_ioport: Install an I/O port region on the ISA bus.
 *
 * Register an I/O port region via memory_region_add_subregion
 * inside the ISA I/O address space.
 *
 * @dev: the ISADevice against which these are registered; may be NULL.
 * @io: the #MemoryRegion being registered.
 * @start: the base I/O port.
 */
void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start);

/**
 * isa_register_portio_list: Initialize a set of ISA io ports
 *
 * Several ISA devices have many dis-joint I/O ports.  Worse, these I/O
 * ports can be interleaved with I/O ports from other devices.  This
 * function makes it easy to create multiple MemoryRegions for a single
 * device and use the legacy portio routines.
 *
 * @dev: the ISADevice against which these are registered; may be NULL.
 * @start: the base I/O port against which the portio->offset is applied.
 * @portio: the ports, sorted by offset.
 * @opaque: passed into the old_portio callbacks.
 * @name: passed into memory_region_init_io.
 */
void isa_register_portio_list(ISADevice *dev, uint16_t start,
                              const MemoryRegionPortio *portio,
                              void *opaque, const char *name);

A
Anthony Liguori 已提交
74
extern target_phys_addr_t isa_mem_base;
P
pbrook 已提交
75

A
Avi Kivity 已提交
76
void isa_mmio_setup(MemoryRegion *mr, target_phys_addr_t size);
77
void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size);
P
pbrook 已提交
78 79 80 81 82 83 84 85

/* dma.c */
int DMA_get_channel_mode (int nchan);
int DMA_read_memory (int nchan, void *buf, int pos, int size);
int DMA_write_memory (int nchan, void *buf, int pos, int size);
void DMA_hold_DREQ (int nchan);
void DMA_release_DREQ (int nchan);
void DMA_schedule(int nchan);
B
Blue Swirl 已提交
86
void DMA_init(int high_page_enable, qemu_irq *cpu_request_exit);
P
pbrook 已提交
87 88 89
void DMA_register_channel (int nchan,
                           DMA_transfer_handler transfer_handler,
                           void *opaque);
90
#endif