1 |
/* |
/* |
2 |
* Copyright (C) 2004-2005 Anders Gavare. All rights reserved. |
* Copyright (C) 2004-2007 Anders Gavare. All rights reserved. |
3 |
* |
* |
4 |
* Redistribution and use in source and binary forms, with or without |
* Redistribution and use in source and binary forms, with or without |
5 |
* modification, are permitted provided that the following conditions are met: |
* modification, are permitted provided that the following conditions are met: |
25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: dev_kn220.c,v 1.3 2005/02/21 07:01:08 debug Exp $ |
* $Id: dev_kn220.c,v 1.8 2007/06/15 19:11:15 debug Exp $ |
29 |
* |
* |
30 |
* DEC KN220 (DECsystem 5500) devices. |
* COMMENT: DEC KN220 (DECsystem 5500) devices |
31 |
* |
* |
32 |
* o) I/O board |
* o) I/O board |
33 |
* o) SGEC (ethernet) (Called "ne" in Ultrix.) |
* o) SGEC (ethernet) (Called "ne" in Ultrix.) |
59 |
/* |
/* |
60 |
* dev_dec5500_ioboard_access(): |
* dev_dec5500_ioboard_access(): |
61 |
*/ |
*/ |
62 |
int dev_dec5500_ioboard_access(struct cpu *cpu, struct memory *mem, |
DEVICE_ACCESS(dec5500_ioboard) |
|
uint64_t relative_addr, unsigned char *data, size_t len, |
|
|
int writeflag, void *extra) |
|
63 |
{ |
{ |
64 |
/* struct dec5500_ioboard_data *d = |
/* struct dec5500_ioboard_data *d = |
65 |
(struct dec5500_ioboard_data *) extra; */ |
(struct dec5500_ioboard_data *) extra; */ |
66 |
uint64_t idata = 0, odata = 0; |
uint64_t idata = 0, odata = 0; |
67 |
|
|
68 |
idata = memory_readmax64(cpu, data, len); |
if (writeflag == MEM_WRITE) |
69 |
|
idata = memory_readmax64(cpu, data, len); |
70 |
|
|
71 |
#ifdef IOBOARD_DEBUG |
#ifdef IOBOARD_DEBUG |
72 |
if (writeflag == MEM_WRITE) |
if (writeflag == MEM_WRITE) |
108 |
/* |
/* |
109 |
* dev_sgec_access(): |
* dev_sgec_access(): |
110 |
*/ |
*/ |
111 |
int dev_sgec_access(struct cpu *cpu, struct memory *mem, |
DEVICE_ACCESS(sgec) |
|
uint64_t relative_addr, unsigned char *data, size_t len, |
|
|
int writeflag, void *extra) |
|
112 |
{ |
{ |
113 |
/* struct sgec_data *d = (struct sgec_data *) extra; */ |
/* struct sgec_data *d = (struct sgec_data *) extra; */ |
114 |
uint64_t idata = 0, odata = 0; |
uint64_t idata = 0, odata = 0; |
152 |
*/ |
*/ |
153 |
void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr) |
void dev_sgec_init(struct memory *mem, uint64_t baseaddr, int irq_nr) |
154 |
{ |
{ |
155 |
struct sgec_data *d = malloc(sizeof(struct sgec_data)); |
struct sgec_data *d; |
156 |
if (d == NULL) { |
|
157 |
fprintf(stderr, "out of memory\n"); |
CHECK_ALLOCATION(d = malloc(sizeof(struct sgec_data))); |
|
exit(1); |
|
|
} |
|
158 |
memset(d, 0, sizeof(struct sgec_data)); |
memset(d, 0, sizeof(struct sgec_data)); |
159 |
|
|
160 |
d->irq_nr = irq_nr; |
d->irq_nr = irq_nr; |
161 |
|
|
162 |
memory_device_register(mem, "sgec", baseaddr, DEV_SGEC_LENGTH, |
memory_device_register(mem, "sgec", baseaddr, DEV_SGEC_LENGTH, |
163 |
dev_sgec_access, (void *)d, MEM_DEFAULT, NULL); |
dev_sgec_access, (void *)d, DM_DEFAULT, NULL); |
164 |
} |
} |
165 |
|
|
166 |
|
|
170 |
struct dec5500_ioboard_data *dev_dec5500_ioboard_init(struct cpu *cpu, |
struct dec5500_ioboard_data *dev_dec5500_ioboard_init(struct cpu *cpu, |
171 |
struct memory *mem, uint64_t baseaddr) |
struct memory *mem, uint64_t baseaddr) |
172 |
{ |
{ |
173 |
struct dec5500_ioboard_data *d = |
struct dec5500_ioboard_data *d; |
174 |
malloc(sizeof(struct dec5500_ioboard_data)); |
|
175 |
if (d == NULL) { |
CHECK_ALLOCATION(d = malloc(sizeof(struct dec5500_ioboard_data))); |
|
fprintf(stderr, "out of memory\n"); |
|
|
exit(1); |
|
|
} |
|
176 |
memset(d, 0, sizeof(struct dec5500_ioboard_data)); |
memset(d, 0, sizeof(struct dec5500_ioboard_data)); |
177 |
|
|
178 |
memory_device_register(mem, "dec5500_ioboard", baseaddr, |
memory_device_register(mem, "dec5500_ioboard", baseaddr, |
179 |
DEV_DEC5500_IOBOARD_LENGTH, dev_dec5500_ioboard_access, |
DEV_DEC5500_IOBOARD_LENGTH, dev_dec5500_ioboard_access, |
180 |
(void *)d, MEM_DEFAULT, NULL); |
(void *)d, DM_DEFAULT, NULL); |
181 |
|
|
182 |
return d; |
return d; |
183 |
} |
} |