25 |
* SUCH DAMAGE. |
* SUCH DAMAGE. |
26 |
* |
* |
27 |
* |
* |
28 |
* $Id: dev_le.c,v 1.39 2005/03/14 19:14:02 debug Exp $ |
* $Id: dev_le.c,v 1.43 2005/07/27 06:57:34 debug Exp $ |
29 |
* |
* |
30 |
* LANCE ethernet, as used in DECstations. |
* LANCE ethernet, as used in DECstations. |
31 |
* |
* |
93 |
int reg_select; |
int reg_select; |
94 |
uint16_t reg[N_REGISTERS]; |
uint16_t reg[N_REGISTERS]; |
95 |
|
|
96 |
unsigned char sram[SRAM_SIZE]; |
unsigned char *sram; |
97 |
|
|
98 |
/* Initialization block: */ |
/* Initialization block: */ |
99 |
uint32_t init_block_addr; |
uint32_t init_block_addr; |
768 |
uint64_t buf_start, uint64_t buf_end, int irq_nr, int len) |
uint64_t buf_start, uint64_t buf_end, int irq_nr, int len) |
769 |
{ |
{ |
770 |
char *name2; |
char *name2; |
771 |
|
size_t nlen = 55; |
772 |
struct le_data *d = malloc(sizeof(struct le_data)); |
struct le_data *d = malloc(sizeof(struct le_data)); |
773 |
|
|
774 |
if (d == NULL) { |
if (d == NULL) { |
779 |
memset(d, 0, sizeof(struct le_data)); |
memset(d, 0, sizeof(struct le_data)); |
780 |
d->irq_nr = irq_nr; |
d->irq_nr = irq_nr; |
781 |
|
|
782 |
|
d->sram = malloc(SRAM_SIZE); |
783 |
|
if (d->sram == NULL) { |
784 |
|
fprintf(stderr, "out of memory\n"); |
785 |
|
exit(1); |
786 |
|
} |
787 |
|
memset(d->sram, 0, SRAM_SIZE); |
788 |
|
|
789 |
/* TODO: Are these actually used yet? */ |
/* TODO: Are these actually used yet? */ |
790 |
d->len = len; |
d->len = len; |
791 |
d->buf_start = buf_start; |
d->buf_start = buf_start; |
824 |
|
|
825 |
memory_device_register(mem, "le_sram", baseaddr, |
memory_device_register(mem, "le_sram", baseaddr, |
826 |
SRAM_SIZE, dev_le_sram_access, (void *)d, |
SRAM_SIZE, dev_le_sram_access, (void *)d, |
827 |
MEM_BINTRANS_OK | MEM_BINTRANS_WRITE_OK, d->sram); |
MEM_DYNTRANS_OK | MEM_DYNTRANS_WRITE_OK |
828 |
|
| MEM_READING_HAS_NO_SIDE_EFFECTS, d->sram); |
829 |
|
|
830 |
name2 = malloc(50); |
name2 = malloc(nlen); |
831 |
if (name2 == NULL) { |
if (name2 == NULL) { |
832 |
fprintf(stderr, "out of memory in dev_le_init()\n"); |
fprintf(stderr, "out of memory in dev_le_init()\n"); |
833 |
exit(1); |
exit(1); |
834 |
} |
} |
835 |
sprintf(name2, "le [%02x:%02x:%02x:%02x:%02x:%02x]", |
snprintf(name2, nlen, "le [%02x:%02x:%02x:%02x:%02x:%02x]", |
836 |
d->rom[0], d->rom[1], d->rom[2], d->rom[3], d->rom[4], d->rom[5]); |
d->rom[0], d->rom[1], d->rom[2], d->rom[3], d->rom[4], d->rom[5]); |
837 |
|
|
838 |
memory_device_register(mem, name2, baseaddr + 0x100000, |
memory_device_register(mem, name2, baseaddr + 0x100000, |