Broadcom Bcm94312hmg Driver
Use the original OEM disc or version 5.100.82.112. Modern drivers will not improve performance on these OSes.
The main issue users face with the BCM94312HMG is "Driver Abandonment." Official support pages on HP or Dell websites often link to broken files or only offer drivers for Windows Vista, which won't install on Windows 10 or 11.
Furthermore, Broadcom does not release drivers directly to consumers; they supply them to OEMs. This leaves users scavenging the internet for installer packages.
Initialization:
static int bcm94312_init_hw(struct bcm94312_priv *priv) int err; // Upload firmware err = bcm94312_load_firmware(priv, BCM94312_FW_FILE); if (err) return err;// Send CMD_UP struct bcm94312_cmd cmd = .cmd_id = CMD_UP, .cmd_len = 4, .payload = 0x01, 0x00, 0x00, 0x00 // enable flags ; err = bcm94312_send_cmd(priv, &cmd); if (err) return err; // Set MAC address memcpy(cmd.payload, priv->mac_addr, 6); cmd.cmd_id = CMD_WRITE_MAC_ADDR; cmd.cmd_len = 6; return bcm94312_send_cmd(priv, &cmd);
TX path:
static void bcm94312_tx(struct ieee80211_hw *hw,
struct ieee80211_tx_control *control,
struct sk_buff *skb)
TX_FLAG_INTERRUPT;
wmb(); // write memory barrier
// Ring the doorbell
writel(ring_idx, priv->mmio + BCM94312_MAILBOX_TX);
priv->tx_ring_head = (ring_idx + 1) % TX_RING_SIZE;
ieee80211_tx_info_clear_status(ieee80211_cb(skb));
RX handling (interrupt):
static irqreturn_t bcm94312_irq_handler(int irq, void *dev_id) struct bcm94312_priv *priv = dev_id; uint32_t status = readl(priv->mmio + BCM94312_MAILBOX_RX);while (status & RX_PENDING) struct sk_buff *skb = dev_alloc_skb(MAX_RX_SIZE); int rx_idx = priv->rx_ring_tail; struct rx_desc *desc = &priv->rx_ring[rx_idx]; skb_put_data(skb, phys_to_virt(desc->address), desc->length); ieee80211_rx_irqsafe(priv->hw, skb); priv->rx_ring_tail = (rx_idx + 1) % RX_RING_SIZE; status = readl(priv->mmio + BCM94312_MAILBOX_RX); return IRQ_HANDLED;
If you need better performance (802.11n/ac), replace the BCM94312HMG with:
| Card | Chipset | Speed | Works in same slot? | |------|---------|-------|---------------------| | Broadcom BCM943224HMS | BCM43224 | 300 Mbps (2x2 b/g/n) | Yes (2.4 GHz only) | | Intel 6205 | Centrino Advanced-N | 300 Mbps | No (BIOS whitelist issue) | | Atheros AR5B95 | AR9285 | 150 Mbps | Often whitelist-free | broadcom bcm94312hmg driver
Warning: Most modern cards require PCIe + USB (for Bluetooth) and will not work in pure PCIe slots like the BCM94312HMG uses.