while not keypressed (Posts about bios)https://www.keypressure.com/blog/tags/bios.atom2022-11-06T22:59:47ZRoman YepishevNikolaI'm sorry, Dave. I'm afraid I can't do that.https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/2016-01-26T20:30:22Z2016-01-26T20:30:22ZRoman Yepishev<div><p>I decided to upgrade my Lenovo laptop's WiFi card (Intel Centrino
Wireless-N 1000), so that I get to experience dual-band 802.11ac instead of
cave-grade 2.4GHz 802.11bgn. Additionally, my laptop's bluetooth performance was
extremely poor. While my Nexus 5 could talk to the bluetooth speaker across
20m, the laptop struggled to push bytes across the table.</p>
<p>I have already performed a similar upgrade on my wife's Acer eMachines device
where a Broadcom-based proprietary weirdness was replaced by Intel's magic
hardware with all the drivers already present in the Linux kernel, so I did not
anticipate anything going wrong.</p>
<figure>
<img alt="/galleries/dropbox/intel-wifi-8086-08b3.jpg" src="https://www.keypressure.com/galleries/dropbox/intel-wifi-8086-08b3.jpg">
<figcaption>
<p>8086:08b3 (FCC ID: PD93160H)</p>
</figcaption>
</figure>
<p>The new <a class="reference external" href="http://www.intel.com/content/www/us/en/wireless-products/dual-band-wireless-ac-3160-bluetooth.html">Intel 3160</a>-based device arrived from <a class="reference external" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16833106258">Newegg</a>, and within 5 minutes
I had it in my laptop. Wires connected, test boot...</p>
<div class="code"><pre class="code text"><a id="rest_code_473a1e2beeb1494f9cc11cb592a19788-1" name="rest_code_473a1e2beeb1494f9cc11cb592a19788-1" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_473a1e2beeb1494f9cc11cb592a19788-1"></a>1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card (8086/08B3)
<a id="rest_code_473a1e2beeb1494f9cc11cb592a19788-2" name="rest_code_473a1e2beeb1494f9cc11cb592a19788-2" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_473a1e2beeb1494f9cc11cb592a19788-2"></a>
<a id="rest_code_473a1e2beeb1494f9cc11cb592a19788-3" name="rest_code_473a1e2beeb1494f9cc11cb592a19788-3" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_473a1e2beeb1494f9cc11cb592a19788-3"></a>System is halted
</pre></div>
<p>I'm sorry, what?</p>
<p><a href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/">Read more…</a> (5 min remaining to read)</p></div><p>I decided to upgrade my Lenovo laptop's WiFi card (Intel Centrino
Wireless-N 1000), so that I get to experience dual-band 802.11ac instead of
cave-grade 2.4GHz 802.11bgn. Additionally, my laptop's bluetooth performance was
extremely poor. While my Nexus 5 could talk to the bluetooth speaker across
20m, the laptop struggled to push bytes across the table.</p>
<p>I have already performed a similar upgrade on my wife's Acer eMachines device
where a Broadcom-based proprietary weirdness was replaced by Intel's magic
hardware with all the drivers already present in the Linux kernel, so I did not
anticipate anything going wrong.</p>
<figure>
<img alt="/galleries/dropbox/intel-wifi-8086-08b3.jpg" src="https://www.keypressure.com/galleries/dropbox/intel-wifi-8086-08b3.jpg">
<figcaption>
<p>8086:08b3 (FCC ID: PD93160H)</p>
</figcaption>
</figure>
<p>The new <a class="reference external" href="http://www.intel.com/content/www/us/en/wireless-products/dual-band-wireless-ac-3160-bluetooth.html">Intel 3160</a>-based device arrived from <a class="reference external" href="http://www.newegg.com/Product/Product.aspx?Item=N82E16833106258">Newegg</a>, and within 5 minutes
I had it in my laptop. Wires connected, test boot...</p>
<div class="code"><pre class="code text"><a id="rest_code_473a1e2beeb1494f9cc11cb592a19788-1" name="rest_code_473a1e2beeb1494f9cc11cb592a19788-1" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_473a1e2beeb1494f9cc11cb592a19788-1"></a>1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card (8086/08B3)
<a id="rest_code_473a1e2beeb1494f9cc11cb592a19788-2" name="rest_code_473a1e2beeb1494f9cc11cb592a19788-2" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_473a1e2beeb1494f9cc11cb592a19788-2"></a>
<a id="rest_code_473a1e2beeb1494f9cc11cb592a19788-3" name="rest_code_473a1e2beeb1494f9cc11cb592a19788-3" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_473a1e2beeb1494f9cc11cb592a19788-3"></a>System is halted
</pre></div>
<p>I'm sorry, what?</p>
<!-- TEASER_END -->
<p>Plugging in the new WiFi card into the second miniPCI slot gave me:</p>
<div class="code"><pre class="code text"><a id="rest_code_b8266252ae594cf8a19b1ad3c243c4c6-1" name="rest_code_b8266252ae594cf8a19b1ad3c243c4c6-1" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_b8266252ae594cf8a19b1ad3c243c4c6-1"></a>1802: Unauthorized network card is plugged in - Power off and remove the miniPCI network card (8086/08B3/8086/0070)
</pre></div>
<p><code class="docutils literal">8086</code> is the PCI Vendor ID for Intel, and <code class="docutils literal">80B3</code> is the Product ID for
<code class="docutils literal">Intel Corporation Wireless 3160 (rev cb)</code>, so my Laptop was actively
refusing the new card. <code class="docutils literal">0070</code> is PCI Subsystem ID mapping to
<code class="docutils literal">Intel Corporation Dual Band <span class="pre">Wireless-AC</span> 3160</code>.</p>
<p>There were two ways to get throught that - return the card claiming
incompatibility (no 802.11ac, no BT 4.0 LE for me then) or continue plowing
through, knowing nothing about miniPCI authorization thingie.</p>
<p>The first thing I Googled was the mention of <cite>1802</cite> error in LKML in 2004 (!):</p>
<blockquote>
<p>I met this 1802 error problem several months ago, and
since then my wifi card was used in a very clumsy and
inconvenient way. I used to boot to LILO menu or
Windows system first, then suspend and plug
in the card. After that, when the system is awake, the
card is working.</p>
<p class="attribution">—<a class="reference external" href="https://lkml.org/lkml/2004/6/13/12">Tisheng Chen on LKML</a></p>
</blockquote>
<p>He then continues with assembly listing for a program that would switch the
BIOS into allowing the unauthorized cards, but based on my <a class="reference external" href="http://thinkwiki.org/wiki/Problem_with_unauthorized_MiniPCI_network_card#Modifying_the_BIOS">subsequent research</a>,
this won't work with newer machines.</p>
<p>Armed with the knowledge of suspend/resume cycle, I started my machine with the
old module, suspended the laptop, swapped the card. Upon resume the <code class="docutils literal">lspci</code> was
happy to report I have a working device:</p>
<div class="code"><pre class="code text"><a id="rest_code_bb1097a4d7b047738a9349b710780bff-1" name="rest_code_bb1097a4d7b047738a9349b710780bff-1" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_bb1097a4d7b047738a9349b710780bff-1"></a>8:00.0 Network controller: Intel Corporation Wireless 3160 (rev cb)
<a id="rest_code_bb1097a4d7b047738a9349b710780bff-2" name="rest_code_bb1097a4d7b047738a9349b710780bff-2" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_bb1097a4d7b047738a9349b710780bff-2"></a>Subsystem: Intel Corporation Dual Band Wireless-AC 3160
<a id="rest_code_bb1097a4d7b047738a9349b710780bff-3" name="rest_code_bb1097a4d7b047738a9349b710780bff-3" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_bb1097a4d7b047738a9349b710780bff-3"></a>Flags: bus master, fast devsel, latency 0, IRQ 29
<a id="rest_code_bb1097a4d7b047738a9349b710780bff-4" name="rest_code_bb1097a4d7b047738a9349b710780bff-4" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_bb1097a4d7b047738a9349b710780bff-4"></a>Memory at d1d00000 (64-bit, non-prefetchable) [size=8K]
<a id="rest_code_bb1097a4d7b047738a9349b710780bff-5" name="rest_code_bb1097a4d7b047738a9349b710780bff-5" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_bb1097a4d7b047738a9349b710780bff-5"></a>...
<a id="rest_code_bb1097a4d7b047738a9349b710780bff-6" name="rest_code_bb1097a4d7b047738a9349b710780bff-6" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_bb1097a4d7b047738a9349b710780bff-6"></a>Kernel driver in use: iwlwifi
<a id="rest_code_bb1097a4d7b047738a9349b710780bff-7" name="rest_code_bb1097a4d7b047738a9349b710780bff-7" href="https://www.keypressure.com/blog/im-sorry-dave-im-afraid-i-cant-do-that/#rest_code_bb1097a4d7b047738a9349b710780bff-7"></a>Kernel modules: iwlwifi
</pre></div>
<p>Ok, so what's happening then?</p>
<blockquote>
<p>Network cards distributed by Lenovo have a unique Subsystem Vendor ID /
Subsystem Identifier (SVID/SSID) which is checked at every boot.
If the SVID/SSID doesn't match, then error code 1802 is displayed.
The purpose of this check is to guarantee that both network cards
and computer systems distributed by Lenovo are used in card/antenna
pairs which have been certified by regulatory bodies like the FCC.</p>
<p class="attribution">—<a class="reference external" href="https://support.lenovo.com/us/en/documents/ht001309">Lenovo HT001309</a></p>
</blockquote>
<p>Well, here's the interesting thing, according to the service manual for E420,
there is no supported 802.11ac device, so that means the laptop will have to spend
its life with the same old card (or slight variations of) until decommissioned.</p>
<p>So, let's start with FCC.</p>
<p>According to Federal Communications Commision both the wireless communication
device and antenna are <a class="reference external" href="https://www.fcc.gov/engineering-technology/laboratory-division/general/equipment-authorization">required</a> to be certified by them before the device can
be used in the US. However, in 2004 the <cite>FCC Rule 04-165</cite> (a good explanation at
<a class="reference external" href="http://wifinetnews.com/archives/2004/07/fcc_allows_add-on_antennas_but_read_the_fine_print.html">Wi-Fi Networking News</a>) was issued that allows the antenna to be changed to
a less powerful one (lower out of band gain) without the need for the combo
to be recertified.</p>
<p>So, vendors build devices, send them to a FCC lab, the latter tests the device, assigns
the FCC-ID, and the device is good for the masses.</p>
<p>Now, if you go through the Title 47, §15, you'll find the following:</p>
<blockquote>
<p>(b) Except as follows, an intentional or unintentional radiator must be
constructed such that the adjustments of any control that is readily
accessible by or intended to be accessible to the user will not cause
operation of the device in violation of the regulations.</p>
<p class="attribution">—<a class="reference external" href="http://www.ecfr.gov/cgi-bin/text-idx?node=pt47.1.15#se47.1.15_15">Code of Federal Regulations Title 47 §15.15</a></p>
</blockquote>
<p>And this can be seen as an encouragement for the vendors to actively prevent the installation
of a different wireless card. Except that swapping the wireless board is not a
"readily accessible" control.</p>
<p>Now, if we dig deeper, we find:</p>
<blockquote>
<p>(a) Equipment authorization is not required for devices that are not
marketed, are not constructed from a kit, and are built in quantities
of five or less for personal use.</p>
<p class="attribution">—Code of Federal Regulations Title 47 §15.23 Home-built devices.</p>
</blockquote>
<p>And a Kit is defined as:</p>
<blockquote>
<p>(p) Kit. Any number of electronic parts, usually provided with a schematic
diagram or printed circuit board, which, when assembled in accordance with
instructions, results in a device subject to the regulations in this part,
even if additional parts of any type are required to complete assembly.</p>
<p class="attribution">—Code of Federal Regulations Title 47 §15.3 Definitions</p>
</blockquote>
<p><a class="reference external" href="https://www.sparkfun.com">Sparkfun</a> later posted some information regarding the kits:</p>
<blockquote>
<p>[...] the FCC clearly expects a modicum of engineering experience to be involved
in the assembly of a kit for it to be considered a kit.</p>
<p class="attribution">—<a class="reference external" href="https://www.sparkfun.com/tutorials/398">The FCC and Open Source Hardware</a></p>
</blockquote>
<p>IANAL, but it looks like Lenovo is not really required to prohibit installation of
non-certified equipment as part of their laptop.</p>
<blockquote>
<p>If you are contacted by the FCC (or anyone else) about a matter of spectrum
interference, immediately stop using the device, don't use it again, and you
should be okay.</p>
<p class="attribution">—<a class="reference external" href="https://www.sparkfun.com/tutorials/398">The FCC and Open Source Hardware</a></p>
</blockquote>
<p>Which brings me to the point of the post - my machine effectively told me it's not going
to work for me unless I use only the parts approved by somebody else (DRM much?).
It would have had a reason if my suspend/swap/resume trick also failed to work
meaning the card is not compatible in principle.</p>
<p>So, I decided to force my way through. Since I lack the knowledge of BIOS structures, I ended
up at BIOS Mods, <a class="reference external" href="https://www.bios-mods.com/forum/Thread-REQUEST-Lenovo-ThinkPad-Edge-E520-Whitelist-removal--13646">[REQUEST] Lenovo ThinkPad Edge E520 Whitelist removal</a>. Got the <code class="docutils literal">ThinkPad_Edge_E520_420_525_425_8huj17us_NWL.rar</code> by <code class="docutils literal">sovem</code>
(<code class="docutils literal">SHA1: 83da8d26e44ca59e67411afc264c72f666d5ffc6</code>). At that time I was briefly involved with Windows 10, so I did the BIOS update through <code class="docutils literal">flash.bat</code> running <code class="docutils literal">WINUPTP.EXE <span class="pre">-s</span></code>.</p>
<p>Reboot.</p>
<p>Laptop is not bricked, the new WiFi card works as expected. I also got a
new <code class="docutils literal">hci1</code> device, which turned out to be my internal Bluetooth USB dongle.
The <code class="docutils literal">hci0</code> device was taken by the WiFi/BT combo on the miniPCI card, and for
the first time in this laptop's life I could use the Bluetooth speaker without
worrying about the range. Wi-Fi performance remained unchanged (I only have a
2.4GHz AP at the moment), but I can say I had no service interruptions for 2
months already.</p>
<p>Needless to say, my next laptop is not going to be Lenovo. And it won't be <a class="reference external" href="http://goughlui.com/2014/08/02/laptop-wireless-card-whitelists-an-upgrade-nightmare/">HP</a> either.</p>
<p><strong>Update</strong>: <a class="reference external" href="https://www.slightfuture.com/technote/replace-broadcom-wifi-with-intel#comment-36">According</a> to <a class="reference external" href="https://www.slightfuture.com">Daniel Aleksandersen</a>,</p>
<blockquote>
<p>Lenovo’s consumer level laptops don’t have this restriction. As far as I can tell, it only applies to their business line of laptops (including ThinkPads).</p>
</blockquote>