Files
2024-02-19 00:25:23 -05:00

51 lines
1.3 KiB
C

#include "kernel.h"
#include "minix/com.h"
#include "dp8390.h"
#include "internet.h"
#include "etherformat.h"
#include "etherplus.h"
#include "dp8390info.h"
#include "eplinfo.h"
#include "assert.h"
/* macros for device I/O */
#define input(devaddr, ep_register) \
in_byte((vir_bytes)&((struct eplusreg *) devaddr)->ep_register)
#define output(devaddr, ep_register, value) \
out_byte((vir_bytes)&((struct eplusreg *) devaddr)->ep_register, value)
epl_init() {
register vir_bytes device;
register sum;
device = eplinfo.epi_devaddr;
assert((dp8390info.dpi_membase&0x81FFF)==0x80000);
sum =
input(device, epl_ea5) +
input(device, epl_ea4) +
input(device, epl_ea3) +
input(device, epl_ea2) +
input(device, epl_ea1) +
input(device, epl_ea0) +
input(device, epl_res2) +
input(device, epl_chksum);
if ((sum&0xFF) != 0xFF)
panic("No ethernet board", NO_NUM);
output(device, epl_ctlstatus, CTL_RESET);
output(device, epl_ctlstatus, CTL_MENABLE|((dp8390info.dpi_membase>>13)&CTL_MEMADDR));
}
etheraddr(eaddr) Eth_addr *eaddr; {
register vir_bytes device;
device = eplinfo.epi_devaddr;
eaddr->e[0] = input(device, epl_ea0);
eaddr->e[1] = input(device, epl_ea1);
eaddr->e[2] = input(device, epl_ea2);
eaddr->e[3] = input(device, epl_ea3);
eaddr->e[4] = input(device, epl_ea4);
eaddr->e[5] = input(device, epl_ea5);
}