83 if (old_isa_assert == new_isa_assert)
107 int old_isa_assert, line = interrupt->
line;
108 int mask = 1 << (line & 7);
130 int line = interrupt->
line, mask = 1 << (line & 7);
131 int old_irr1 = d->
pic1->
irr, old_isa_assert;
133 old_isa_assert = old_irr1 & ~d->
pic1->
ier;
142 if (old_irr1 & 1 && !(d->
pic1->
irr & 1) &&
153 uint64_t idata = 0, odata = 0;
154 int bus, dev, func,
reg;
161 relative_addr &= 0xfffff;
162 relative_addr |= ((d->
lb_map0 & 0xfff0) << 16);
164 for (dev=24; dev<32; dev++)
165 if (relative_addr & (1 << dev))
169 fatal(
"[ v3_pci: NO DEVICE? ]\n");
172 func = (relative_addr >> 8) & 7;
173 reg = relative_addr & 0xfc;
178 &odata : &idata, len, writeflag);
190 uint64_t idata = 0, odata = 0;
195 switch (relative_addr) {
228 fatal(
"[ v3: unimplemented write to " 229 "offset 0x%x: data=0x%x ]\n", (
int)
230 relative_addr, (
int)idata);
232 fatal(
"[ v3: unimplemented read from " 233 "offset 0x%x ]\n", (
int)relative_addr);
247 uint32_t isa_port_base = 0x1d000000;
249 char isa_irq_base[200];
250 char pci_irq_base[200];
254 memset(d, 0,
sizeof(
struct v3_data));
258 snprintf(tmpstr,
sizeof(tmpstr),
"%s.4",
262 snprintf(tmpstr,
sizeof(tmpstr),
"%s.2",
269 default:
fatal(
"!\n! WARNING: v3 for non-implemented machine" 278 for (i=0; i<17; i++) {
281 snprintf(n,
sizeof(n),
"%s.v3.isa.%i",
283 memset(&templ, 0,
sizeof(templ));
293 snprintf(tmpstr,
sizeof(tmpstr),
"8259 irq=%s.v3.isa.16 addr=0x%llx",
300 snprintf(tmpstr,
sizeof(tmpstr),
"8259 irq=%s.v3.isa.2 addr=0x%llx",
305 snprintf(isa_irq_base,
sizeof(isa_irq_base),
"%s.v3",
307 snprintf(pci_irq_base,
sizeof(pci_irq_base),
"%s.v3",
330 default:
fatal(
"!\n! WARNING: v3 for non-implemented machine" 337 0x1ee00000, 0x100000, dev_v3_pci_access, d,
DM_DEFAULT, NULL);
341 0x1ef00000, 0x1000, dev_v3_access, d,
DM_DEFAULT, NULL);
uint64_t memory_readmax64(struct cpu *cpu, unsigned char *buf, int len)
void fatal(const char *fmt,...)
void(* interrupt_assert)(struct interrupt *)
struct pci_data * pci_data
int * pending_timer_interrupts
void interrupt_handler_register(struct interrupt *templ)
void(* interrupt_deassert)(struct interrupt *)
void v3_isa_interrupt_common(struct v3_data *d, int old_isa_assert)
void bus_pci_add(struct machine *machine, struct pci_data *pci_data, struct memory *mem, int bus, int device, int function, const char *name)
void v3_isa_interrupt_assert(struct interrupt *interrupt)
void * device_add(struct machine *machine, const char *name_and_params)
void v3_isa_interrupt_deassert(struct interrupt *interrupt)
struct isa_pic_data isa_pic_data
#define CHECK_ALLOCATION(ptr)
void bus_pci_setaddr(struct cpu *cpu, struct pci_data *pci_data, int bus, int device, int function, int reg)
struct pic8259_data * pic1
#define INTERRUPT_ASSERT(istruct)
struct pic8259_data * pic2
#define INTERRUPT_CONNECT(name, istruct)
int * ptr_to_pending_timer_interrupts
void memory_writemax64(struct cpu *cpu, unsigned char *buf, int len, uint64_t data)
void memory_device_register(struct memory *mem, const char *, uint64_t baseaddr, uint64_t len, int(*f)(struct cpu *, struct memory *, uint64_t, unsigned char *, size_t, int, void *), void *extra, int flags, unsigned char *dyntrans_data)
struct pic8259_data * pic1
struct pic8259_data * pic2
struct pci_data * bus_pci_init(struct machine *machine, const char *irq_path, uint64_t pci_actual_io_offset, uint64_t pci_actual_mem_offset, uint64_t pci_portbase, uint64_t pci_membase, const char *pci_irqbase, uint64_t isa_portbase, uint64_t isa_membase, const char *isa_irqbase)
struct interrupt irq_local
void bus_pci_data_access(struct cpu *cpu, struct pci_data *pci_data, uint64_t *data, int len, int writeflag)
#define MEM_PCI_LITTLE_ENDIAN
#define INTERRUPT_DEASSERT(istruct)