43 #define DEVICE_MAX_NAMELEN 9 44 #define CARD_NAME_BUFLEN 9 45 #define CARD_FIRMWARE_BUFLEN 5 67 uint64_t idata = 0, odata = 0;
75 debug(
"[ turbochannel: read from slot %i addr 0x%08lx (",
76 d->
slot_nr, (
long)relative_addr);
78 relative_addr &= 0x7fff;
80 switch (relative_addr) {
82 odata = 0x00000001;
debug(
"ROM width");
85 odata = 0x00000004;
debug(
"ROM stride");
89 odata = 0x00000001;
debug(
"ROM size");
93 odata = 0x00000001;
debug(
"slot size");
96 odata = 0x55555555;
debug(
"ROM signature byte 0");
99 odata = 0x00000000;
debug(
"ROM signature byte 1");
102 odata = 0xaaaaaaaa;
debug(
"ROM signature byte 2");
105 odata = 0xffffffff;
debug(
"ROM signature byte 3");
109 odata = 0x00000000;
debug(
"flags");
break;
111 if (relative_addr >= 0x400 && relative_addr < 0x420)
113 (relative_addr-0x400)/4];
114 else if (relative_addr >= 0x420 &&
115 relative_addr < 0x440)
117 (relative_addr-0x420)/4];
118 else if (relative_addr >= 0x440 &&
119 relative_addr < 0x460)
121 (relative_addr-0x440)/4];
122 else if (relative_addr >= 0x460 &&
123 relative_addr < 0x470)
125 (relative_addr-0x460)/4];
148 if (relative_addr < 0x3e0 || relative_addr >= 0x500)
184 if (device_name == NULL)
187 if (
strlen(device_name) > 8) {
188 fprintf(stderr,
"dev_turbochannel_init(): bad device_name\n");
225 if (strcmp(device_name,
"PMAD-AA")==0) {
231 rom_offset = 0x1c0000;
232 rom_length = 0x201000;
233 }
else if (strcmp(device_name,
"PMAZ-AA")==0) {
237 rom_offset = 0xc0000;
240 }
else if (strcmp(device_name,
"PMAG-AA")==0) {
243 VFB_GENERIC, 1280, 1024, 2048, 1024, 8, device_name);
248 }
else if (strcmp(device_name,
"PMAG-BA")==0) {
251 1024,864, 1024,1024,8, device_name);
253 baseaddr + 0x300000, fb, 8, irq_path,
BT459_BA);
255 rom_offset = 0x380000;
256 rom_length = 0x080000;
257 }
else if (strcmp(device_name,
"PMAGB-BA")==0) {
268 }
else if (strcmp(device_name,
"PMAG-CA")==0) {
271 rom_offset = 0x3c0000;
272 }
else if (strcmp(device_name,
"PMAG-DA")==0) {
275 rom_offset = 0x3c0000;
276 }
else if (strcmp(device_name,
"PMAG-EA")==0) {
279 fatal(
"TODO (see dev_turbochannel.c)\n");
280 rom_offset = 0x3c0000;
281 }
else if (strcmp(device_name,
"PMAG-FA")==0) {
285 rom_offset = 0x3c0000;
286 }
else if (strcmp(device_name,
"PMAG-DV")==0) {
288 fb =
dev_fb_init(machine, mem, baseaddr + 0x2000000,
291 rom_offset = 0x3c0000;
292 }
else if (strcmp(device_name,
"PMAG-JA")==0) {
296 }
else if (strcmp(device_name,
"PMAG-RO")==0) {
298 fb =
dev_fb_init(machine, mem, baseaddr + 0x200000,
304 rom_offset = 0x3c0000;
305 }
else if (device_name[0] ==
'\0') {
309 rom_length = 4*1048576;
311 fatal(
"warning: unknown TURBOchannel device name \"%s\"\n",
317 nlen =
strlen(device_name) + 30;
321 snprintf(name2, nlen,
"turbochannel [%s]", device_name);
323 snprintf(name2, nlen,
"turbochannel");
uint64_t memory_readmax64(struct cpu *cpu, unsigned char *buf, int len)
void fatal(const char *fmt,...)
void dev_asc_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, const char *irq_path, void *turbochannel, int mode, size_t(*dma_controller)(void *dma_controller_data, unsigned char *data, size_t len, int writeflag), void *dma_controller_data)
#define CARD_FIRMWARE_BUFLEN
void dev_px_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int px_type, const char *irq_path)
struct vfb_data * dev_fb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, int vfb_type, int visible_xsize, int visible_ysize, int xsize, int ysize, int bit_depth, const char *name)
void dev_pmagja_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, const char *irq_path)
char card_firmware_type[CARD_FIRMWARE_BUFLEN]
void dev_bt431_init(struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data, int planes)
void dev_le_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t buf_start, uint64_t buf_end, const char *irq_path, int len)
void dev_turbochannel_init(struct machine *machine, struct memory *mem, int slot_nr, uint64_t baseaddr, uint64_t endaddr, const char *device_name, const char *irq_path)
#define DEV_TURBOCHANNEL_LEN
void dev_sfb_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, struct vfb_data *fb)
#define CHECK_ALLOCATION(ptr)
void dev_bt459_init(struct machine *machine, struct memory *mem, uint64_t baseaddr, uint64_t baseaddr_irq, struct vfb_data *vfb_data, int planes, const char *irq_path, int type)
DEVICE_ACCESS(turbochannel)
int dev_turbochannel_access(struct cpu *cpu, struct memory *mem, uint64_t relative_addr, unsigned char *data, size_t len, int writeflag, void *)
void dev_bt455_init(struct memory *mem, uint64_t baseaddr, struct vfb_data *vfb_data)
char device_name[DEVICE_MAX_NAMELEN]
char card_module_name[CARD_NAME_BUFLEN]
void COMBINE() strlen(struct cpu *cpu, struct arm_instr_call *ic, int low_addr)
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)
#define DEVICE_MAX_NAMELEN
char card_vendor_name[CARD_NAME_BUFLEN]
#define DEV_PX_TYPE_PXGPLUSTURBO
char card_firmware_version[CARD_NAME_BUFLEN]