Hi!
This is my first post here, though I've lurked on the youtube channel for a while now!
I have a limited electronics background - a school qualification, some digital electronics at university and work, an interest in physics plus a little understanding of analogue electronics. Also, when I was a kid, a kind TV repair shop owner in the early 80s let me have a bench in his workshop on Saturdays, and he taught me a bit about the subject and got me interested.
The Problem--------------
I've been trying to find a way to defeat the wifi card BIOS whitelist in my old HP 6710b laptop.
The BIOS whitelist is a restriction imposed by the HP in the BIOS code that only permits mini PCI express wifi cards having certain PCI vendor and device IDs (VEN & DEV ids) to be used in the computer. Rant-----
HP (and other vendors) argue that whitelisting is necessary to comply with FCC electromagnetic compatibility requirements, since card and computer combinations are tested as one unit - which seems a ridiculous argument, since a) not all manufacturers whitelist wifi cards, b) the aftermarket cards you buy are FCC tested and c) after they sell it to me, it's none of HP's business what I do with my computer.
Tested and Possible solutions--------------------------------
The whitelist restriction means that I can only use a few, long out-of-date wireless cards in my laptop, which is good in other respects and now runs at a reasonable speed with the addition of an SSD hard drive.
Some people have managed to defeat the restrictions on some HP laptops by patching the BIOS, but I cannot do this because HP released a final update to the BIOS, version F.20, which did the user no good at all, but effectively locked down the computer's firmware from any further changes, for all time. (It uses a digital signing scheme to prevent flashing of a modified BIOS).
Given that I cannot flash a modified BIOS, the only other option appears to be to effectively hotplug the card after the BIOS has scanned the PCI bus, so that it cannot give me its 'Error 104 unsupported wireless network device detected' message and halt the computer before it can boot.
Some people doing experiments have found that hotplugging the card allows it to be scanned by the OS after it has booted, defeating the whitelist, but more often than not it fries the card or the mainboard.
So my question is: How can I make a circuit to effectively disconnect the wifi card for a period of time so that the BIOS POST routine thinks it is not there when it scans the PCI bus?
The solution also needs to re-enable the card a few seconds later so that the operating system will detect it when it boots.
What I have found out-------------------------
I've had a look at the mini PCI Express pinout, and I've found that there are two types of interface used in these 52-pin cards: a USB-2 interface and a PCI express x1 interface. (See attached image mini PCI.png)
I do not know if both interfaces are implemented on the 6710b, but they need not be if the types of cards which can be used are restricted by the BIOS.
Mini PCI Express pinout
PCI express x1 Channel 0----------------------------
The PCI express x1 channel uses LVDS (low-voltage differential signalling), meaning it requires two pins for outbound data, and two pins for inbound data. I think these are
PERn0 and
PERp0 (i.e., negative and positive Receive), and
PETn0 and
PETp0 (i.e. - and + Transmit).
There is a
REFCLK+ and
REFCLK- signal also, which presumably is a serial clock line using LVDS for transmitted and / or received data on the PCI express channel (this may not be simple; I think that there is some kind of PLL clock mechanism derived from the PCI data, rather than a master clock generated on the PCI bus, to prevent problems associated with clock skew happening with the high-frequency clocks used by the PCI specification).
Power------
The card has two
1.5 and
3.3v power supplies, plus a
3.3v aux pin. [I think the the
3.3v aux may be intended to be shorted to the
PERST# (reset) pin on the card when the card is not in a reset state (but I am only surmising this, because they are on adjacent pins)]. There is no 5v or 12v power pin.
USB2 interface----------------
This is on two pins,
USB_D- and
USB_D+ (also LVDS?). There are grounds either side of these pins, which may also be for the USB (shielding?).
Miscellaneous - SMBUS--------------------------
There is also an SMBUS implemented (though I do not know if it is on the HP 6710b laptop),
SMB_CLK and
SMB_DATA. It looks like a two-wire IIC type bus, which I am familar with, but I don't expect it is used in the implementation of common Wifi cards.
My Question--------------
How do I implement a circuit which will make the wifi card appear to be unplugged, either electronically for a few seconds when the BIOS does a PCI bus scan, or on some kind of hard switch?
I need to do this in a way that will not risk destroying the mini PCI card or the PCI bus circuitry when the card is switched in or out.
The mini PCI bus slot in the HP 6710b is of the longer type - double the length of the most recent wifi cards, but not as long as the PCI flash drive cards.
I thought I could implement the circuit on a circuitboard the same size as the smallest form factor mini PCI cards (the latest type), and connect a wifi card of the same size to it to create a full length card of the same size as the slot in the 6710b.
If I tri-state (high impedance) the
PERp0 and
PERn0, and
PETp0 and
PETn0 lines, the
REFCLK+ / - lines, and for the sake of completeness the
USB_D- and + lines, for a fixed period after power on, then allow the signals to pass through the tristate buffer after that, would that do? Would the buffers be fast enough to not interfere with the operation of the PCI bus? Is there an easier way?
Please Help!
Many thanks for reading if you got this far / want to help!
References:
Mini PCI express pinout:
http://pinoutguide.com/Slots/mini_pcie_pinout.shtml