PERFORCE change 41035 for review

Sam Leffler sam at FreeBSD.org
Fri Oct 31 17:37:24 PST 2003


http://perforce.freebsd.org/chv.cgi?CH=41035

Change 41035 by sam at sam_ebb on 2003/10/31 17:37:19

	o replace calculate checksum by a static HAL ABI version
	o print HAL version when !bootverbose (otherwise it's
	  printed by the ath_hal module)

Affected files ...

.. //depot/projects/netperf/sys/dev/ath/if_ath.c#31 edit

Differences ...

==== //depot/projects/netperf/sys/dev/ath/if_ath.c#31 (text+ko) ====

@@ -174,33 +174,6 @@
 #define	DPRINTF2(X)
 #endif
 
-/*
- * Calculate a "checksum" that the driver can use to
- * check for ABI compatibility.  We just sum the offsets
- * of all the function pointers which are assumed to
- * start with ah_getRateTable and continue sequentially
- * to the end of the structure.  If a new method is added
- * or moved this will be detected.  This will not, however
- * catch methods being moved around or some number added
- * while an equal number are replaced, or arguments being
- * changed, or lots of other things.
- *
- * This is stopgap.  Improvements are welcome.
- */
-static u_int32_t
-ath_calcsum(void)
-{
-	u_int32_t sum = 0;
-	u_int32_t off;
-
-	off = offsetof(struct ath_hal, ah_getRateTable);
-	while (off < sizeof(struct ath_hal)) {
-		sum += off;
-		off += sizeof(void (*)(void));
-	}
-	return sum;
-}
-
 int
 ath_attach(u_int16_t devid, struct ath_softc *sc)
 {
@@ -223,9 +196,17 @@
 		error = ENXIO;
 		goto bad;
 	}
-	if (ah->ah_checksum != ath_calcsum()) {
-		if_printf(ifp, "HAL ABI mismatch detected (%u != %u)\n",
-			ah->ah_checksum, ath_calcsum());
+	if (!bootverbose) {
+		/*
+		 * The ath_hal module prints the version string
+		 * with bootverbose so only do it here for the
+		 * other case.
+		 */
+		if_printf(ifp, "hal %s\n", ath_hal_version);
+	}
+	if (ah->ah_abi != HAL_ABI_VERSION) {
+		if_printf(ifp, "HAL ABI mismatch detected (0x%x != 0x%x)\n",
+			ah->ah_abi, HAL_ABI_VERSION);
 		error = ENXIO;
 		goto bad;
 	}


More information about the p4-projects mailing list