Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 May 2016 23:23:50 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r299780 - head/sys/dev/bwn
Message-ID:  <201605142323.u4ENNoGN084004@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Sat May 14 23:23:50 2016
New Revision: 299780
URL: https://svnweb.freebsd.org/changeset/base/299780

Log:
  [bwn] add in new microcode and phy initval information.
  
  This is required for PHY-N and later hardware.
  
  Tested:
  
  * BCN4321 (11abgn), PHY-N

Modified:
  head/sys/dev/bwn/if_bwn.c

Modified: head/sys/dev/bwn/if_bwn.c
==============================================================================
--- head/sys/dev/bwn/if_bwn.c	Sat May 14 23:22:52 2016	(r299779)
+++ head/sys/dev/bwn/if_bwn.c	Sat May 14 23:23:50 2016	(r299780)
@@ -3731,21 +3731,84 @@ bwn_fw_gets(struct bwn_mac *mac, enum bw
 	int error;
 
 	/* microcode */
-	if (rev >= 5 && rev <= 10)
-		filename = "ucode5";
-	else if (rev >= 11 && rev <= 12)
-		filename = "ucode11";
-	else if (rev == 13)
-		filename = "ucode13";
-	else if (rev == 14)
-		filename = "ucode14";
-	else if (rev >= 15)
+	filename = NULL;
+	switch (rev) {
+	case 42:
+		if (mac->mac_phy.type == BWN_PHYTYPE_AC)
+			filename = "ucode42";
+		break;
+	case 40:
+		if (mac->mac_phy.type == BWN_PHYTYPE_AC)
+			filename = "ucode40";
+		break;
+	case 33:
+		if (mac->mac_phy.type == BWN_PHYTYPE_LCN40)
+			filename = "ucode33_lcn40";
+		break;
+	case 30:
+		if (mac->mac_phy.type == BWN_PHYTYPE_N)
+			filename = "ucode30_mimo";
+		break;
+	case 29:
+		if (mac->mac_phy.type == BWN_PHYTYPE_HT)
+			filename = "ucode29_mimo";
+		break;
+	case 26:
+		if (mac->mac_phy.type == BWN_PHYTYPE_HT)
+			filename = "ucode26_mimo";
+		break;
+	case 28:
+	case 25:
+		if (mac->mac_phy.type == BWN_PHYTYPE_N)
+			filename = "ucode25_mimo";
+		else if (mac->mac_phy.type == BWN_PHYTYPE_LCN)
+			filename = "ucode25_lcn";
+		break;
+	case 24:
+		if (mac->mac_phy.type == BWN_PHYTYPE_LCN)
+			filename = "ucode24_lcn";
+		break;
+	case 23:
+		if (mac->mac_phy.type == BWN_PHYTYPE_N)
+			filename = "ucode16_mimo";
+		break;
+	case 16:
+	case 17:
+	case 18:
+	case 19:
+		if (mac->mac_phy.type == BWN_PHYTYPE_N)
+			filename = "ucode16_mimo";
+		else if (mac->mac_phy.type == BWN_PHYTYPE_LP)
+			filename = "ucode16_lp";
+		break;
+	case 15:
 		filename = "ucode15";
-	else {
+		break;
+	case 14:
+		filename = "ucode14";
+		break;
+	case 13:
+		filename = "ucode13";
+		break;
+	case 12:
+	case 11:
+		filename = "ucode11";
+		break;
+	case 10:
+	case 9:
+	case 8:
+	case 7:
+	case 6:
+	case 5:
+		filename = "ucode5";
+		break;
+	default:
 		device_printf(sc->sc_dev, "no ucode for rev %d\n", rev);
 		bwn_release_firmware(mac);
 		return (EOPNOTSUPP);
 	}
+
+	device_printf(sc->sc_dev, "ucode fw: %s\n", filename);
 	error = bwn_fw_get(mac, type, filename, &fw->ucode);
 	if (error) {
 		bwn_release_firmware(mac);
@@ -3797,7 +3860,17 @@ bwn_fw_gets(struct bwn_mac *mac, enum bw
 			goto fail1;
 		break;
 	case BWN_PHYTYPE_N:
-		if (rev >= 11 && rev <= 12)
+		if (rev == 30)
+			filename = "n16initvals30";
+		else if (rev == 28 || rev == 25)
+			filename = "n0initvals25";
+		else if (rev == 24)
+			filename = "n0initvals24";
+		else if (rev == 23)
+			filename = "n0initvals16";
+		else if (rev >= 16 && rev <= 18)
+			filename = "n0initvals16";
+		else if (rev >= 11 && rev <= 12)
 			filename = "n0initvals11";
 		else
 			goto fail1;
@@ -3843,12 +3916,24 @@ bwn_fw_gets(struct bwn_mac *mac, enum bw
 			goto fail1;
 		break;
 	case BWN_PHYTYPE_N:
-		if (rev >= 11 && rev <= 12)
+		if (rev == 30)
+			filename = "n16bsinitvals30";
+		else if (rev == 28 || rev == 25)
+			filename = "n0bsinitvals25";
+		else if (rev == 24)
+			filename = "n0bsinitvals24";
+		else if (rev == 23)
+			filename = "n0bsinitvals16";
+		else if (rev >= 16 && rev <= 18)
+			filename = "n0bsinitvals16";
+		else if (rev >= 11 && rev <= 12)
 			filename = "n0bsinitvals11";
 		else
 			goto fail1;
 		break;
 	default:
+		device_printf(sc->sc_dev, "unknown phy (%d)\n",
+		    mac->mac_phy.type);
 		goto fail1;
 	}
 	error = bwn_fw_get(mac, type, filename, &fw->initvals_band);
@@ -3858,7 +3943,8 @@ bwn_fw_gets(struct bwn_mac *mac, enum bw
 	}
 	return (0);
 fail1:
-	device_printf(sc->sc_dev, "no INITVALS for rev %d\n", rev);
+	device_printf(sc->sc_dev, "no INITVALS for rev %d, phy.type %d\n",
+	    rev, mac->mac_phy.type);
 	bwn_release_firmware(mac);
 	return (EOPNOTSUPP);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201605142323.u4ENNoGN084004>