Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!utgpu!water!watnot!watmath!clyde!rutgers!ames!ptsfa!ihnp4!inuxc!pur-ee!uiucdcs!uiucdcsb!richards From: richards@uiucdcsb.UUCP Newsgroups: comp.unix.wizards Subject: Re: ProNET network interface on uVAXen Message-ID: <164600005@uiucdcsb> Date: Tue, 24-Mar-87 00:44:00 EST Article-I.D.: uiucdcsb.164600005 Posted: Tue Mar 24 00:44:00 1987 Date-Received: Thu, 26-Mar-87 01:50:10 EST References: <5365@brl-adm.ARPA> Lines: 33 Nf-ID: #R:brl-adm.ARPA:5365:uiucdcsb:164600005:000:1306 Nf-From: uiucdcsb.cs.uiuc.edu!richards Mar 23 23:44:00 1987 I was bitten by this too -- it turns out that the driver is a little sloppy in not masking off extended address bits for DMA. The UNIBUS proNET card pays attention to only 18 address bits, but the Q-bus card is sensitive to 22 address bits. The integer returned by if_ubainit() in the ifrw_info field actually contains several fields, which have non-zero bits in the positions that get pushed into the extended bus addr register of the Q-bus card, giving bogus DMA addresses. The whole address should be masked to 18 bits for both UNIBUS and Q-bus systems. (At least Ultrix 2.1 worked that way -- have later BSD derivitives used the full 22 bit Q-bus address space?). In sys/vaxif/if_vv.c, change all references of the form: ubainfo = vs->vs_ifuba.ifu_r.ifrw_info; and ubainfo = vs->vs_ifuba.ifu_w.ifrw_info; to something like ubainfo = UBA_ADDRMASK(vs->vs_ifuba.ifu_r.ifrw_info); or ubainfo = UBA_ADDRMASK(vs->vs_ifuba.ifu_w.ifrw_info); and define this in the top of the file: #define UBA_ADDRMASK(i) UBAI_ADDR(i) (or if your system doesn't have UBAI_ADDR() in sys/vaxuba/ubavar.h, use this) #define UBA_ADDRMASK(i) ((int)(i) & 0x3ffff) Paul Richards University of Illinois at Urbana-Champaign, Dept of Comp Sci UUCP: {pur-ee,convex,inhp4}!uiucdcs!richards ARPA: richards@b.cs.uiuc.edu