Module Name:    src
Committed By:   pooka
Date:           Thu Aug 12 18:17:23 UTC 2010

Modified Files:
        src/sys/rump/net/lib/libshmif: dumpbus.c if_shmem.c shmifvar.h

Log Message:
* include a magic number in the bus format
* simplify offset calculations by making them start from beginning of data


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/rump/net/lib/libshmif/dumpbus.c
cvs rdiff -u -r1.16 -r1.17 src/sys/rump/net/lib/libshmif/if_shmem.c
cvs rdiff -u -r1.1 -r1.2 src/sys/rump/net/lib/libshmif/shmifvar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/rump/net/lib/libshmif/dumpbus.c
diff -u src/sys/rump/net/lib/libshmif/dumpbus.c:1.3 src/sys/rump/net/lib/libshmif/dumpbus.c:1.4
--- src/sys/rump/net/lib/libshmif/dumpbus.c:1.3	Thu Aug 12 17:33:55 2010
+++ src/sys/rump/net/lib/libshmif/dumpbus.c	Thu Aug 12 18:17:23 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: dumpbus.c,v 1.3 2010/08/12 17:33:55 pooka Exp $	*/
+/*	$NetBSD: dumpbus.c,v 1.4 2010/08/12 18:17:23 pooka Exp $	*/
 
 /*
  * Little utility to convert shmif bus traffic to a pcap file
@@ -67,8 +67,11 @@
 		err(1, "mmap");
 
 	bmem = busmem;
-	if (bmem->shm_version != 1)
-		errx(1, "cannot handle bus version %d", bmem->shm_version);
+	if (bmem->shm_magic != SHMIF_MAGIC)
+		errx(1, "%s not a shmif bus", argv[0]);
+	if (bmem->shm_version != SHMIF_VERSION)
+		errx(1, "bus vesrsion %d, program %d",
+		    bmem->shm_version, SHMIF_VERSION);
 	printf("bus version %d, lock: %d, generation: %d, lastoff: 0x%x\n",
 	    bmem->shm_version, bmem->shm_lock, bmem->shm_gen, bmem->shm_last);
 
@@ -106,12 +109,11 @@
 		pktlen = *(uint32_t *)curbus;
 		curbus += sizeof(pktlen);
 
-		/* quirk */
 		if (pktlen == 0)
 			continue;
 
 		printf("packet %d, offset 0x%x, length 0x%x\n",
-		    i++, curbus - (uint8_t *)(bmem + 1), pktlen);
+		    i++, curbus - bmem->shm_data, pktlen);
 
 		if (!pcapfile || pktlen == 0) {
 			curbus += pktlen;

Index: src/sys/rump/net/lib/libshmif/if_shmem.c
diff -u src/sys/rump/net/lib/libshmif/if_shmem.c:1.16 src/sys/rump/net/lib/libshmif/if_shmem.c:1.17
--- src/sys/rump/net/lib/libshmif/if_shmem.c:1.16	Thu Aug 12 17:33:55 2010
+++ src/sys/rump/net/lib/libshmif/if_shmem.c	Thu Aug 12 18:17:23 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_shmem.c,v 1.16 2010/08/12 17:33:55 pooka Exp $	*/
+/*	$NetBSD: if_shmem.c,v 1.17 2010/08/12 18:17:23 pooka Exp $	*/
 
 /*
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_shmem.c,v 1.16 2010/08/12 17:33:55 pooka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_shmem.c,v 1.17 2010/08/12 18:17:23 pooka Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -81,8 +81,7 @@
 
 #define BUSMEM_SIZE (1024*1024) /* need write throttling? */
 
-/* just in case ... */
-static const uint32_t busversion = 1;
+static const uint32_t busversion = SHMIF_VERSION;
 
 static void shmif_rcv(void *);
 
@@ -123,18 +122,18 @@
 
 	KASSERT(len < (BUSMEM_SIZE - IFMEM_DATA) && off <= BUSMEM_SIZE);
 	chunk = MIN(len, BUSMEM_SIZE - off);
-	memcpy(dest, (uint8_t *)sc->sc_busmem + off, chunk);
+	memcpy(dest, sc->sc_busmem->shm_data + off, chunk);
 	len -= chunk;
 
 	if (len == 0)
 		return off + chunk;
 
 	/* else, wraps around */
-	off = IFMEM_DATA;
+	off = 0;
 	sc->sc_prevgen = sc->sc_busmem->shm_gen;
 
 	/* finish reading */
-	memcpy((uint8_t *)dest + chunk, (uint8_t *)sc->sc_busmem + off, len);
+	memcpy((uint8_t *)dest + chunk, sc->sc_busmem->shm_data + off, len);
 	return off + len;
 }
 
@@ -143,26 +142,25 @@
 {
 	size_t chunk;
 
-	KASSERT(len < (BUSMEM_SIZE - IFMEM_DATA) && off <= BUSMEM_SIZE
-	    && off >= IFMEM_DATA);
+	KASSERT(len < (BUSMEM_SIZE - IFMEM_DATA) && off <= BUSMEM_SIZE);
 
 	chunk = MIN(len, BUSMEM_SIZE - off);
-	memcpy((uint8_t *)sc->sc_busmem + off, data, chunk);
+	memcpy(sc->sc_busmem->shm_data + off, data, chunk);
 	len -= chunk;
 
 	if (len == 0)
 		return off + chunk;
 
-	DPRINTF(("buswrite wrap: wrote %d bytes to %d, left %d to %d",
-	    chunk, off, len, IFMEM_DATA));
+	DPRINTF(("buswrite wrap: wrote %d bytes to %d, left %d to 0",
+	    chunk, off, len));
 
 	/* else, wraps around */
-	off = IFMEM_DATA;
+	off = 0;
 	sc->sc_prevgen = sc->sc_busmem->shm_gen;
 	sc->sc_busmem->shm_gen++;
 
 	/* finish writing */
-	memcpy((uint8_t *)sc->sc_busmem + off, (uint8_t *)data + chunk, len);
+	memcpy(sc->sc_busmem->shm_data + off, (uint8_t *)data + chunk, len);
 	return off + len;
 }
 
@@ -216,9 +214,11 @@
 	if (error)
 		goto fail;
 
+	if (sc->sc_busmem->shm_magic && sc->sc_busmem->shm_magic != SHMIF_MAGIC)
+		panic("bus is not magical");
+	sc->sc_busmem->shm_magic = SHMIF_MAGIC;
+
 	lockbus(sc);
-	if (sc->sc_busmem->shm_last == 0)
-		sc->sc_busmem->shm_last = IFMEM_DATA;
 	sc->sc_nextpacket = sc->sc_busmem->shm_last;
 	sc->sc_prevgen = sc->sc_busmem->shm_gen;
 	unlockbus(sc);

Index: src/sys/rump/net/lib/libshmif/shmifvar.h
diff -u src/sys/rump/net/lib/libshmif/shmifvar.h:1.1 src/sys/rump/net/lib/libshmif/shmifvar.h:1.2
--- src/sys/rump/net/lib/libshmif/shmifvar.h:1.1	Thu Aug 12 17:33:55 2010
+++ src/sys/rump/net/lib/libshmif/shmifvar.h	Thu Aug 12 18:17:23 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: shmifvar.h,v 1.1 2010/08/12 17:33:55 pooka Exp $	*/
+/*	$NetBSD: shmifvar.h,v 1.2 2010/08/12 18:17:23 pooka Exp $	*/
 
 /*-
  * Copyright (c) 2009 Antti Kantee.  All Rights Reserved.
@@ -30,11 +30,20 @@
 #ifndef _RUMP_NET_SHMIFVAR_H_
 #define _RUMP_NET_SHMIFVAR_H_
 
+#define SHMIF_MAGIC 0xca11d054
+#define SHMIF_VERSION 1
+
 struct shmif_mem {
-	uint32_t shm_lock;
+	uint32_t shm_magic;
+	uint32_t shm_version;
+
 	uint32_t shm_gen;
+	uint32_t shm_first;
 	uint32_t shm_last;
-	uint32_t shm_version;
+
+	uint32_t shm_lock;
+	uint32_t shm_spare[2];
+
 	uint8_t shm_data[0];
 };
 

Reply via email to