Module Name:    src
Committed By:   martin
Date:           Mon Oct 14 17:47:00 UTC 2024

Modified Files:
        src/sys/dev/sdmmc [netbsd-10]: sdmmc_cis.c

Log Message:
Pull up following revision(s) (requested by jmcneill in ticket #977):

        sys/dev/sdmmc/sdmmc_cis.c: revision 1.9

sdmmc: Decode CISTPL_FUNCE of type PCMCIA_TPLFE_TYPE_LAN_NID


To generate a diff of this commit:
cvs rdiff -u -r1.8 -r1.8.26.1 src/sys/dev/sdmmc/sdmmc_cis.c

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

Modified files:

Index: src/sys/dev/sdmmc/sdmmc_cis.c
diff -u src/sys/dev/sdmmc/sdmmc_cis.c:1.8 src/sys/dev/sdmmc/sdmmc_cis.c:1.8.26.1
--- src/sys/dev/sdmmc/sdmmc_cis.c:1.8	Mon Oct 28 06:31:39 2019
+++ src/sys/dev/sdmmc/sdmmc_cis.c	Mon Oct 14 17:47:00 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdmmc_cis.c,v 1.8 2019/10/28 06:31:39 mlelstv Exp $	*/
+/*	$NetBSD: sdmmc_cis.c,v 1.8.26.1 2024/10/14 17:47:00 martin Exp $	*/
 /*	$OpenBSD: sdmmc_cis.c,v 1.1 2006/06/01 21:53:41 uwe Exp $	*/
 
 /*
@@ -20,7 +20,7 @@
 /* Routines to decode the Card Information Structure of SD I/O cards */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdmmc_cis.c,v 1.8 2019/10/28 06:31:39 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdmmc_cis.c,v 1.8.26.1 2024/10/14 17:47:00 martin Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_sdmmc.h"
@@ -103,6 +103,30 @@ decode_funce_common(struct sdmmc_functio
 }
 
 static void
+decode_funce_lan_nid(struct sdmmc_function *sf, struct sdmmc_cis *cis,
+		     int tpllen, uint32_t reg)
+{
+	struct sdmmc_function *sf0 = sf->sc->sc_fn0;
+	device_t dev = sf->sc->sc_dev;
+	uint8_t mac[6] __unused;
+	int i;
+
+	if (tpllen != 8) {
+		aprint_error_dev(dev,
+		    "CISTPL_FUNCE(lan_nid) too short\n");
+		return;
+	}
+
+	for (i = 0; i < 6; i++) {
+		mac[i] = sdmmc_io_read_1(sf0, reg++);
+	}
+
+	DPRINTF(
+	    ("CISTPL_FUNCE: LAN_NID=%02x:%02x:%02x:%02x:%02x:%02x\n",
+	    mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]));
+}
+
+static void
 decode_funce_function(struct sdmmc_function *sf, struct sdmmc_cis *cis,
 		      int tpllen, uint32_t reg)
 {
@@ -221,10 +245,16 @@ sdmmc_read_cis(struct sdmmc_function *sf
 
 		switch (tplcode) {
 		case PCMCIA_CISTPL_FUNCE:
-			if (sdmmc_io_read_1(sf0, reg++) == 0)
+			switch (sdmmc_io_read_1(sf0, reg++)) {
+			case 0:
 				decode_funce_common(sf, cis, tpllen, reg);
-			else
+				break;
+			case PCMCIA_TPLFE_TYPE_LAN_NID:
+				decode_funce_lan_nid(sf, cis, tpllen, reg);
+				break;
+			default:
 				decode_funce_function(sf, cis, tpllen, reg);
+			}
 			reg += (tpllen - 1);
 			break;
 

Reply via email to