diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2006-08-30 19:28:14 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2006-08-30 19:28:14 +0000 |
commit | 302cfe701533ce5dd8ffa808ba95ceac1468a01a (patch) | |
tree | ef8e863d4796abdd6973bad3d244c451d864bcce /sys/arch/vax/vxt | |
parent | 701389a42635590876733b8299f8de9263429650 (diff) |
Teach the SGEC driver about the Real World:
- check for error bits in descriptors, and count and report errors
accordingly; make sure we do not pass up known-to-be-bad packets up the
receive path.
- check for various error conditions which would cause the transmit process
to go to suspended state, and recover from them, before the timeout expires.
- finally, on the VXT2000, the transmit process for some reason will reset
its ring position to the beginning of the ring every time it completes a
transmission burst, while we don't, so play with the head of ring register
behind its back. This makes my VXT2000+ (net)boot multiuser.
Tested on VXT2000 (ze@vxtbus), KA49 (ze@vsbus) and KA53 (ze@ibus); ok deraadt@
Diffstat (limited to 'sys/arch/vax/vxt')
-rw-r--r-- | sys/arch/vax/vxt/if_ze_vxtbus.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/arch/vax/vxt/if_ze_vxtbus.c b/sys/arch/vax/vxt/if_ze_vxtbus.c index ee4e4ed08e1..727cded771f 100644 --- a/sys/arch/vax/vxt/if_ze_vxtbus.c +++ b/sys/arch/vax/vxt/if_ze_vxtbus.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_ze_vxtbus.c,v 1.1 2006/08/27 16:55:41 miod Exp $ */ +/* $OpenBSD: if_ze_vxtbus.c,v 1.2 2006/08/30 19:28:13 miod Exp $ */ /* * Copyright (c) 1999 Ludd, University of Lule}, Sweden. All rights reserved. * @@ -91,5 +91,6 @@ ze_vxt_attach(struct device *parent, struct device *self, void *aux) sc->sc_ac.ac_enaddr[i] = ea[i] & 0xff; vax_unmap_physmem((vaddr_t)ea, 1); + SET(sc->sc_flags, SGECF_VXTQUIRKS); sgec_attach(sc); } |