|
|
1.1 ! root 1: /* ethstrt.c - ethstrt.c */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <network.h> ! 6: ! 7: /*------------------------------------------------------------------------ ! 8: * ethstrt - reset DEQNA Ethernet hardware and leave it operating ! 9: *------------------------------------------------------------------------ ! 10: */ ! 11: ethstrt(etptr, setup) ! 12: struct etblk *etptr; ! 13: struct dqsetup *setup; ! 14: { ! 15: struct dqregs *dqptr; ! 16: struct dcmd *dcmptr; ! 17: int i, j; ! 18: ! 19: dqptr = etptr->eioaddr; ! 20: ! 21: /* initialize device */ ! 22: ! 23: dqptr->d_csr |= DQ_REST; ! 24: dqptr->d_csr &= ~DQ_REST; ! 25: dqptr->d_vect = (short) ( (etptr->etdev)->dvivec - 0x200 ); ! 26: ! 27: /* build setup packet */ ! 28: ! 29: for (i=0 ; i < (DQ_ROWS>>1) ; i++) { ! 30: setup->dq_set[i+DQ_SETD][0] = setup->dq_set[i][0] = 0; ! 31: setup->dq_set[i+DQ_SETD][1] = setup->dq_set[i][1] = ! 32: i<EPADLEN ? DQ_BCST : 0; ! 33: for (j=2 ; j<DQ_COLS ; j++) ! 34: setup->dq_set[i+DQ_SETD][j] = setup->dq_set[i][j]= ! 35: i<EPADLEN ? etptr->etpaddr[i] : 0; ! 36: } ! 37: ethrstrt(etptr, setup->dq_echo, ! 38: sizeof(setup->dq_echo) + sizeof(setup->dq_crc) ); ! 39: ethwstrt(etptr, setup->dq_set, sizeof(setup->dq_set), DC_SETUP); ! 40: ! 41: /* poll device until setup processed */ ! 42: ! 43: for (dcmptr=etptr->ercmd ; dcmptr->dc_st1 == DC_INIT ; ) ! 44: ; ! 45: ! 46: /* reset device, leaving it online */ ! 47: ! 48: dqptr->d_csr |= DQ_REST; ! 49: dqptr->d_csr &= ~DQ_REST; ! 50: dqptr->d_csr &= ~DQ_ELOP; ! 51: dqptr->d_csr |= (DQ_ENBL| DQ_IEN | DQ_ILOP); ! 52: return(OK); ! 53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.