69 uint64_t idata = 0, odata = 0;
77 switch (relative_addr) {
89 debug(
"[ dec_ioasic: %s SCSI_DMAPTR, data=0x%08x ]\n",
90 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
100 debug(
"[ dec_ioasic: %s SCSI_NEXTPTR, data=0x%08x ]\n",
101 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
111 debug(
"[ dec_ioasic: %s LANCE_DMAPTR, data=0x%08x ]\n",
112 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
122 debug(
"[ dec_ioasic: %s FLOPPY_DMAPTR, data=0x%08x ]\n",
123 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
133 debug(
"[ dec_ioasic: %s ISDN_X_DMAPTR, data=0x%08x ]\n",
134 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
144 debug(
"[ dec_ioasic: %s ISDN_X_NEXTPTR, data=0x%08x ]\n",
145 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
155 debug(
"[ dec_ioasic: %s ISDN_R_DMAPTR, data=0x%08x ]\n",
156 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
166 debug(
"[ dec_ioasic: %s ISDN_R_NEXTPTR, data=0x%08x ]\n",
167 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
177 debug(
"[ dec_ioasic: %s CSR, data=0x%08x ]\n",
178 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
193 dma_len = 0x1000 - (curptr & 0xffc);
195 if ((curptr & 0xfff) == 0)
203 fatal(
"[ dec_ioasic: DMA tx: data @ " 204 "%08x, len %i bytes, but no " 205 "handler? ]\n", (
int)curptr,
213 0x10] &= ~IOASIC_CSR_DMAEN_T2;
219 3) & ~0x1f) | ((curptr >> 29) & 0x1f);
228 dma_len = 0x1000 - (curptr & 0xffc);
236 fatal(
"[ dec_ioasic: DMA tx: data @ " 237 "%08x, len %i bytes, but no " 238 "handler? ]\n", (
int)curptr,
243 if ((curptr & 0x800) != ((curptr +
253 ((curptr << 3) & ~0x1f) | ((curptr
274 debug(
"[ dec_ioasic: %s INTR, data=0x%08x ]\n",
275 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
288 debug(
"[ dec_ioasic: %s IMSK, data=0x%08x ]\n",
289 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
299 debug(
"[ dec_ioasic: %s ISDN_X_DATA, data=0x%08x ]\n",
300 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
310 debug(
"[ dec_ioasic: %s ISDN_R_DATA, data=0x%08x ]\n",
311 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
321 debug(
"[ dec_ioasic: %s LANCE_DECODE, data=0x%08x ]\n",
322 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
332 debug(
"[ dec_ioasic: %s SCSI_DECODE, data=0x%08x ]\n",
333 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
343 debug(
"[ dec_ioasic: %s SCC0_DECODE, data=0x%08x ]\n",
344 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
354 debug(
"[ dec_ioasic: %s SCC1_DECODE, data=0x%08x ]\n",
355 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
365 debug(
"[ dec_ioasic: %s FLOPPY_DECODE, data=0x%08x ]\n",
366 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
376 debug(
"[ dec_ioasic: %s SCSI_SCR, data=0x%08x ]\n",
377 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
387 debug(
"[ dec_ioasic: %s SCSI_SDR0, data=0x%08x ]\n",
388 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
398 debug(
"[ dec_ioasic: %s SCSI_SDR1, data=0x%08x ]\n",
399 writeflag ==
MEM_WRITE ?
"write to" :
"read from",
412 fatal(
"[ dec_ioasic: attempt to write to the station's" 413 " ethernet address. ignored for now. ]\n");
436 fatal(
"[ dec_ioasic: unimplemented write to address " 437 "0x%llx, data=0x%08llx ]\n",
438 (
long long)relative_addr, (
long long)idata);
440 fatal(
"[ dec_ioasic: unimplemented read from address " 441 "0x%llx ]\n", (
long long)relative_addr);
uint64_t memory_readmax64(struct cpu *cpu, unsigned char *buf, int len)
#define IOASIC_LANCE_DECODE
void fatal(const char *fmt,...)
void(* interrupt_assert)(struct interrupt *)
void * dma_func_extra[MAX_IOASIC_DMA_FUNCTIONS]
void dec_ioasic_reassert(struct dec_ioasic_data *d)
int dev_dec_ioasic_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *)
#define IOASIC_SYS_ETHER_ADDRESS(base)
#define IOASIC_CSR_DMAEN_T2
#define IOASIC_SCSI_NEXTPTR
#define IOASIC_ISDN_X_DATA
int(* dma_func[MAX_IOASIC_DMA_FUNCTIONS])(struct cpu *, void *, uint64_t addr, size_t dma_len, int tx)
void(* interrupt_deassert)(struct interrupt *)
#define IOASIC_ISDN_R_DMAPTR
DEVICE_ACCESS(dec_ioasic)
#define IOASIC_FLOPPY_DECODE
#define CHECK_ALLOCATION(ptr)
#define IOASIC_ISDN_X_DMAPTR
#define IOASIC_SCSI_DECODE
#define IOASIC_ISDN_R_NEXTPTR
#define IOASIC_INTR_R2_HALF_PAGE
#define IOASIC_SCC_T2_DMAPTR
#define IOASIC_FLOPPY_DMAPTR
#define IOASIC_SCSI_DMAPTR
#define IOASIC_ISDN_X_NEXTPTR
#define IOASIC_INTR_T2_PAGE_END
#define IOASIC_ISDN_R_DATA
#define IOASIC_SCC1_DECODE
#define DEV_DEC_IOASIC_LENGTH
void memory_writemax64(struct cpu *cpu, unsigned char *buf, int len, uint64_t data)
#define IOASIC_SCC_R2_DMAPTR
#define IOASIC_SCC0_DECODE
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)
#define IOASIC_SLOT_1_START
struct dec_ioasic_data * dev_dec_ioasic_init(struct cpu *cpu, struct memory *mem, uint64_t baseaddr, int rackmount_flag, struct interrupt *irqp)
#define IOASIC_CSR_DMAEN_R2
#define IOASIC_LANCE_DMAPTR