/* * Mimic the NIOT;H BUG command (except for `P-Address' field), adding our * own driver names. */ void display_ethernet() { struct mvmeprom_brdid *brdid; int i; brdid = mvmeprom_brdid(); printf("Network Controllers/Nodes Supported\n"); printf("Driver CLUN DLUN Name Address Ethernet Address\n"); for (i = 0; i < nie_config; i++) { printf("ie%d %x 0 VME%x", i, ie_config[i].clun, brdid->model); /* @#$%! MVME8120 - and I don't even have one to test (miod) */ if (brdid->model < 0x1000) printf(" "); printf(" $%x %s\n", ie_config[i].phys_addr, ether_sprintf(ie_config[i].eaddr)); } for (i = 0; i < nle_config; i++) { printf("le%d %x 0 VME376 $%x %s\n", i, le_config[i].clun, le_config[i].phys_addr, ether_sprintf(le_config[i].eaddr)); } }
_start() { register int dev_lun asm (MVMEPROM_REG_DEVLUN); register int ctrl_lun asm (MVMEPROM_REG_CTRLLUN); register int flags asm (MVMEPROM_REG_SCSUPP); register int ctrl_addr asm (MVMEPROM_REG_CTRLADDR); register int entry asm (MVMEPROM_REG_ENTRY); register int conf_blk asm (MVMEPROM_REG_IPA); register char *arg_start asm (MVMEPROM_REG_ARGSTART); register char *arg_end asm (MVMEPROM_REG_ARGEND); register char *nbarg_start asm (MVMEPROM_REG_NBARGSTART); register char *nbarg_end asm (MVMEPROM_REG_NBARGEND); extern int edata, end; struct mvmeprom_brdid *id, *mvmeprom_brdid(); bugargs.dev_lun = dev_lun; bugargs.ctrl_lun = ctrl_lun; bugargs.flags = flags; bugargs.ctrl_addr = ctrl_addr; bugargs.entry = entry; bugargs.conf_blk = conf_blk; bugargs.arg_start = arg_start; bugargs.arg_end = arg_end; bugargs.nbarg_start = nbarg_start; bugargs.nbarg_end = nbarg_end; *bugargs.arg_end = 0; *bugargs.nbarg_end = 0; id = mvmeprom_brdid(); bugargs.cputyp = id->model; memset(&edata, 0, ((int)&end - (int)&edata)); asm ("# main()"); main(); mvmeprom_return(); /* NOTREACHED */ }
/* * Figure out what devices are available. */ int probe_ethernet() { struct mvmeprom_brdid *brdid; uint n; brdid = mvmeprom_brdid(); /* On-board Ethernet */ switch (brdid->model) { case BRD_187: case BRD_197: case BRD_8120: ie_config[nie_config].clun = 0; ie_config[nie_config].phys_addr = INTEL_REG_ADDR; bcopy(brdid->etheraddr, ie_config[nie_config].eaddr, 6); add_if(&ie_driver); nie_config++; break; } /* MVME376 */ for (n = 0; n < sizeof(vle_addr) / sizeof(vle_addr[0]); n++) { if (badaddr((void *)vle_addr[n], 2) == 0) { le_config[nle_config].clun = 2 + n; le_config[nle_config].phys_addr = vle_addr[n]; le_config[nle_config].buf_addr = VLEMEMBASE - n * VLEMEMSIZE; le_config[nle_config].buf_size = VLEMEMSIZE; le_read_etheraddr(vle_addr[n], le_config[nle_config].eaddr); add_if(&le_driver); nle_config++; } } return nie_config + nle_config; }