root / hw / isa.h @ b881fbe9
History | View | Annotate | Download (2.7 kB)
1 |
#ifndef HW_ISA_H
|
---|---|
2 |
#define HW_ISA_H
|
3 |
|
4 |
/* ISA bus */
|
5 |
|
6 |
#include "ioport.h" |
7 |
#include "memory.h" |
8 |
#include "qdev.h" |
9 |
|
10 |
#define ISA_NUM_IRQS 16 |
11 |
|
12 |
typedef struct ISABus ISABus; |
13 |
typedef struct ISADevice ISADevice; |
14 |
typedef struct ISADeviceInfo ISADeviceInfo; |
15 |
|
16 |
struct ISADevice {
|
17 |
DeviceState qdev; |
18 |
uint32_t isairq[2];
|
19 |
int nirqs;
|
20 |
int ioport_id;
|
21 |
}; |
22 |
|
23 |
typedef int (*isa_qdev_initfn)(ISADevice *dev); |
24 |
struct ISADeviceInfo {
|
25 |
DeviceInfo qdev; |
26 |
isa_qdev_initfn init; |
27 |
}; |
28 |
|
29 |
ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space_io); |
30 |
void isa_bus_irqs(qemu_irq *irqs);
|
31 |
qemu_irq isa_get_irq(int isairq);
|
32 |
void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq); |
33 |
void isa_qdev_register(ISADeviceInfo *info);
|
34 |
MemoryRegion *isa_address_space(ISADevice *dev); |
35 |
ISADevice *isa_create(const char *name); |
36 |
ISADevice *isa_try_create(const char *name); |
37 |
ISADevice *isa_create_simple(const char *name); |
38 |
|
39 |
/**
|
40 |
* isa_register_ioport: Install an I/O port region on the ISA bus.
|
41 |
*
|
42 |
* Register an I/O port region via memory_region_add_subregion
|
43 |
* inside the ISA I/O address space.
|
44 |
*
|
45 |
* @dev: the ISADevice against which these are registered; may be NULL.
|
46 |
* @io: the #MemoryRegion being registered.
|
47 |
* @start: the base I/O port.
|
48 |
*/
|
49 |
void isa_register_ioport(ISADevice *dev, MemoryRegion *io, uint16_t start);
|
50 |
|
51 |
/**
|
52 |
* isa_register_portio_list: Initialize a set of ISA io ports
|
53 |
*
|
54 |
* Several ISA devices have many dis-joint I/O ports. Worse, these I/O
|
55 |
* ports can be interleaved with I/O ports from other devices. This
|
56 |
* function makes it easy to create multiple MemoryRegions for a single
|
57 |
* device and use the legacy portio routines.
|
58 |
*
|
59 |
* @dev: the ISADevice against which these are registered; may be NULL.
|
60 |
* @start: the base I/O port against which the portio->offset is applied.
|
61 |
* @portio: the ports, sorted by offset.
|
62 |
* @opaque: passed into the old_portio callbacks.
|
63 |
* @name: passed into memory_region_init_io.
|
64 |
*/
|
65 |
void isa_register_portio_list(ISADevice *dev, uint16_t start,
|
66 |
const MemoryRegionPortio *portio,
|
67 |
void *opaque, const char *name); |
68 |
|
69 |
extern target_phys_addr_t isa_mem_base;
|
70 |
|
71 |
void isa_mmio_setup(MemoryRegion *mr, target_phys_addr_t size);
|
72 |
void isa_mmio_init(target_phys_addr_t base, target_phys_addr_t size);
|
73 |
|
74 |
/* dma.c */
|
75 |
int DMA_get_channel_mode (int nchan); |
76 |
int DMA_read_memory (int nchan, void *buf, int pos, int size); |
77 |
int DMA_write_memory (int nchan, void *buf, int pos, int size); |
78 |
void DMA_hold_DREQ (int nchan); |
79 |
void DMA_release_DREQ (int nchan); |
80 |
void DMA_schedule(int nchan); |
81 |
void DMA_init(int high_page_enable, qemu_irq *cpu_request_exit); |
82 |
void DMA_register_channel (int nchan, |
83 |
DMA_transfer_handler transfer_handler, |
84 |
void *opaque);
|
85 |
#endif
|