-#define BUSADDR(x) ((0x3D000000 | ((u_long)(kvtophys(x))&0xFFFFFF)) + busoff)
-#define P_BUSADDR(x) ((0x3D000000 | ((u_long)(kvtophys(x))&0xFFFFF0)) + busoff)
-#define INCORE_BASE(p) (((u_long)(&(p)->xs_h2xhdr)) & 0xFFFFFFF0)
-#define RVAL_OFF(n) ((u_long)(&(ex_softc[0].n)) - INCORE_BASE(&ex_softc[0]))
-#define LVAL_OFF(n) ((u_long)(ex_softc[0].n) - INCORE_BASE(&ex_softc[0]))
-#define H2XHDR_OFFSET RVAL_OFF(xs_h2xhdr)
-#define X2HHDR_OFFSET RVAL_OFF(xs_x2hhdr)
-#define H2XENT_OFFSET LVAL_OFF(xs_h2xent)
-#define X2HENT_OFFSET LVAL_OFF(xs_x2hent)
-#define CM_OFFSET RVAL_OFF(xs_cm)
-#define SA_OFFSET RVAL_OFF(xs_xsa)
-#define FreePkBuf(b) (((b)->iff_mbuf = (struct mbuf *)xs->xs_pkblist),\
- (xs->xs_pkblist = b))
+ } *xs_shm; /* host pointer to shared area */
+#define xs_h2xhdr xs_shm->sm_h2xhdr
+#define xs_x2hhdr xs_shm->sm_x2hhdr
+#define xs_h2xent xs_shm->sm_h2xent
+#define xs_x2hent xs_shm->sm_x2hent
+#define xs_cm xs_shm->sm_cm
+#define xs_xsa xs_shm->sm_xsa
+#define BUSADDR(x) (0x3D000000 | (((u_long)kvtophys(x))&0xFFFFFF))
+#define P_BUSADDR(x) (0x3D000000 | (((u_long)kvtophys(x))&0xFFFFF0))
+#define INCORE_BASE(p) (((u_long)(p)->xs_shm) & 0xFFFFFFF0)
+/* we will arrange that the shared memory begins on a 16 byte boundary */
+#define RVAL_OFF(n) (((char *)&(((struct ex_shm *)0)->n))-(char *)0)
+#define LVAL_OFF(n) (((char *)(((struct ex_shm *)0)->n))-(char *)0)
+#define H2XHDR_OFFSET RVAL_OFF(sm_h2xhdr)
+#define X2HHDR_OFFSET RVAL_OFF(sm_x2hhdr)
+#define H2XENT_OFFSET LVAL_OFF(sm_h2xent)
+#define X2HENT_OFFSET LVAL_OFF(sm_x2hent)
+#define CM_OFFSET RVAL_OFF(sm_cm)
+#define SA_OFFSET RVAL_OFF(sm_xsa)