Contribute
Register

[Guide] How to get Bluetooth and Wifi working

Joined
Feb 8, 2017
Messages
20
Motherboard
ASRock X99E-ITX Micro ITX
CPU
i7-5820K
Graphics
RX 570
(Last update: 2019/04/22)

There are multiple ways you can get wifi and bluetooth working in your hackintosh:

  • USB dongle
  • PCI/PCIe card
  • mini PCI-e card
Most of the PCI-based cards will support both wifi and bluetooth (I haven't seen any that supports only one, but they might exist). USB dongles are usually either wifi or bluetooth, but there are some that support both.

USB
As far as I know, macOS does not support any wifi USB dongles natively. This means you will need to install the vendor drivers and use the vendor software to select and connect to the network. I personally do not like this approach, because I prefer to use Apple's Airport UI.

Regarding bluetooth USB dongles, macOS has support for a number of third party dongles. I've written a small ruby script to extract the (allegedly) supported vendor and product ids from the bluetooth kexts.

Code:
require 'cfpropertylist'

Dir.glob("/System/Library/Extensions/IOBluetoothFamily.kext/Contents/PlugIns/*").each do |kext|
  next if ["IOBluetoothSerialManager", "IOBluetoothHostControllerUSBTransport", "IOBluetoothHostControllerUARTTransport", "IOBluetoothHostControllerPCIeTransport", "IOBluetoothHostControllerTransport"].any? { |name| kext.include?(name) }
  puts "File: #{File.basename(kext)}"

  plist = CFPropertyList::List.new(:file => "#{kext}/Contents/Info.plist")
  data = CFPropertyList.native_types(plist.value)
  data['IOKitPersonalities'].each do |personality|
    puts "Name: #{personality.first}"
    puts "Vendor ID: #{personality[1]['idVendor']} (#{personality[1]['idVendor'].to_s(16)})"
    puts "Product ID: #{personality[1]['idProduct']} (#{personality[1]['idProduct'].to_s(16)})"
    puts
  end
end
This is the result in 10.14.4:

Code:
File: BroadcomBluetooth20703USBTransport.kext
Name: Broadcom2046FamilyUSBBluetoothHCIController_X238
Vendor ID: 1452 (5ac)
Product ID: 33425 (8291)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X238D
Vendor ID: 1452 (5ac)
Product ID: 33428 (8294)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X238D_Interface
Vendor ID: 1452 (5ac)
Product ID: 33428 (8294)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X238E
Vendor ID: 1452 (5ac)
Product ID: 33430 (8296)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X238E_Interface
Vendor ID: 1452 (5ac)
Product ID: 33430 (8296)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X238_Interface
Vendor ID: 1452 (5ac)
Product ID: 33425 (8291)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X87
Vendor ID: 1452 (5ac)
Product ID: 33424 (8290)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X87_Interface
Vendor ID: 1452 (5ac)
Product ID: 33424 (8290)

File: CSRHIDTransitionDriver.kext
Name: CSRHIDTransitionAppleDFU
Vendor ID: 1452 (5ac)
Product ID: 4096 (1000)

Name: CSRHIDTransitionCSRDFU
Vendor ID: 2578 (a12)
Product ID: 4096 (1000)

Name: CSRHIDTransitionCasiraTest
Vendor ID: 2578 (a12)
Product ID: 61441 (f001)

Name: CSRHIDTransitionForLisbon
Vendor ID: 2578 (a12)
Product ID: 4118 (1016)

File: BroadcomBluetoothHostControllerUSBTransport.kext
Name: Broadcom2045FamilyUSBBluetoothHCIController_D
Vendor ID: 1452 (5ac)
Product ID: 33292 (820c)

Name: Broadcom2045FamilyUSBBluetoothHCIController_P
Vendor ID: 1452 (5ac)
Product ID: 33293 (820d)

Name: Broadcom2046FamilyUSBBluetoothHCIController_10
Vendor ID: 1452 (5ac)
Product ID: 33299 (8213)

Name: Broadcom2046FamilyUSBBluetoothHCIController_16A
Vendor ID: 1452 (5ac)
Product ID: 33310 (821e)

Name: Broadcom2046FamilyUSBBluetoothHCIController_19A
Vendor ID: 1452 (5ac)
Product ID: 33308 (821c)

Name: Broadcom2046FamilyUSBBluetoothHCIController_19B
Vendor ID: 1452 (5ac)
Product ID: 33306 (821a)

Name: Broadcom2046FamilyUSBBluetoothHCIController_19C
Vendor ID: 1452 (5ac)
Product ID: 33309 (821d)

Name: Broadcom2046FamilyUSBBluetoothHCIController_21
Vendor ID: 1452 (5ac)
Product ID: 33307 (821b)

Name: Broadcom2046FamilyUSBBluetoothHCIController_21B
Vendor ID: 1452 (5ac)
Product ID: 33311 (821f)

Name: Broadcom2046FamilyUSBBluetoothHCIController_21C
Vendor ID: 1452 (5ac)
Product ID: 33416 (8288)

Name: Broadcom2046FamilyUSBBluetoothHCIController_27
Vendor ID: 1452 (5ac)
Product ID: 33408 (8280)

Name: Broadcom2046FamilyUSBBluetoothHCIController_28
Vendor ID: 1452 (5ac)
Product ID: 33409 (8281)

Name: Broadcom2046FamilyUSBBluetoothHCIController_28B
Vendor ID: 1452 (5ac)
Product ID: 33418 (828a)

Name: Broadcom2046FamilyUSBBluetoothHCIController_29B
Vendor ID: 1452 (5ac)
Product ID: 33414 (8286)

Name: Broadcom2046FamilyUSBBluetoothHCIController_29C
Vendor ID: 1452 (5ac)
Product ID: 33417 (8289)

Name: Broadcom2046FamilyUSBBluetoothHCIController_29D
Vendor ID: 1452 (5ac)
Product ID: 33420 (828c)

Name: Broadcom2046FamilyUSBBluetoothHCIController_33A3
Vendor ID: 1452 (5ac)
Product ID: 33415 (8287)

Name: Broadcom2046FamilyUSBBluetoothHCIController_33B0
Vendor ID: 1452 (5ac)
Product ID: 33419 (828b)

Name: Broadcom2046FamilyUSBBluetoothHCIController_37A
Vendor ID: 1452 (5ac)
Product ID: 33301 (8215)

Name: Broadcom2046FamilyUSBBluetoothHCIController_51
Vendor ID: 1452 (5ac)
Product ID: 33421 (828d)

Name: Broadcom2046FamilyUSBBluetoothHCIController_52_A
Vendor ID: 1452 (5ac)
Product ID: 33422 (828e)

Name: Broadcom2046FamilyUSBBluetoothHCIController_52_B
Vendor ID: 1452 (5ac)
Product ID: 33423 (828f)

Name: Broadcom2046FamilyUSBBluetoothHCIController_Combo
Vendor ID: 1452 (5ac)
Product ID: 33296 (8210)

Name: Broadcom2046FamilyUSBBluetoothHCIController_D
Vendor ID: 1452 (5ac)
Product ID: 33294 (820e)

Name: Broadcom2046FamilyUSBBluetoothHCIController_M93A
Vendor ID: 1452 (5ac)
Product ID: 33302 (8216)

Name: Broadcom2046FamilyUSBBluetoothHCIController_P
Vendor ID: 1452 (5ac)
Product ID: 33295 (820f)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X100
Vendor ID: 1452 (5ac)
Product ID: 33429 (8295)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X100_Interface
Vendor ID: 1452 (5ac)
Product ID: 33429 (8295)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X11
Vendor ID: 1452 (5ac)
Product ID: 33303 (8217)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X16
Vendor ID: 1452 (5ac)
Product ID: 33304 (8218)

Name: Broadcom2046FamilyUSBBluetoothHCIController_X52D
Vendor ID: 1452 (5ac)
Product ID: 33426 (8292)

Name: Broadcom2046FamilyUSBBluetoothHCIController_XA
Vendor ID: 1452 (5ac)
Product ID: 33299 (8213)

Name: Broadcom2046FamilyUSBBluetoothHCIController_XB
Vendor ID: 1452 (5ac)
Product ID: 33300 (8214)

Name: BroadcomUSBBluetoothHCIController
Vendor ID: 1452 (5ac)
Product ID: 33537 (8301)

Name: Broadcom_Boot_From_ROM
Vendor ID: 2652 (a5c)
Product ID: 8703 (21ff)

Name: MacPro6_1 BRCM20702B0 Hub
Vendor ID: 2652 (a5c)
Product ID: 17664 (4500)

Name: PID 156 0x9C VID 1118 0x45E
Vendor ID: 1118 (45e)
Product ID: 156 (9c)

Name: PID 1626 0x65A VID 1293 0x50D
Vendor ID: 1293 (50d)
Product ID: 1626 (65a)

Name: PID 19829 0x4D75 VID 1121 0x461
Vendor ID: 1121 (461)
Product ID: 19829 (4d75)

Name: PID 23 0x17 VID 1293 0x50D
Vendor ID: 1293 (50d)
Product ID: 23 (17)

Name: PID 289 0x121 VID 1293 0x50D
Vendor ID: 1293 (50d)
Product ID: 289 (121)

Name: PID 362 0x16A VID 1293 0x50D
Vendor ID: 1293 (50d)
Product ID: 362 (16a)

Name: PID 6091 0x17CB VID 2821 0xB05
Vendor ID: 2821 (b05)
Product ID: 6091 (17cb)

Name: PID 8243 0x2033 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8243 (2033)

Name: PID 8448 0x2100 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8448 (2100)

Name: PID 8449 0x2101 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8449 (2101)

Name: PID 8520 0x2148 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8520 (2148)

Name: PID 8531 0x2153 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8531 (2153)

Name: PID 8532 0x2154 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8532 (2154)

Name: PID 8600 0x2198 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8600 (2198)

Name: PID 8680 0x21E8 VID 2652 0xA5C
Vendor ID: 2652 (a5c)
Product ID: 8680 (21e8)

File: IOBluetoothUSBDFU.kext
Name: 2046DFU
Vendor ID: 1452 (5ac)
Product ID: 33298 (8212)

Name: 20702DFU
Vendor ID: 1452 (5ac)
Product ID: 61447 (f007)

Name: 2070DFU
Vendor ID: 1452 (5ac)
Product ID: 33305 (8219)

Name: K37A
Vendor ID: 1452 (5ac)
Product ID: 33301 (8215)

Name: K37L
Vendor ID: 1452 (5ac)
Product ID: 33295 (820f)

Name: M93
Vendor ID: 1452 (5ac)
Product ID: 33296 (8210)

Name: M93A
Vendor ID: 1452 (5ac)
Product ID: 33302 (8216)

Name: X10
Vendor ID: 1452 (5ac)
Product ID: 33299 (8213)

Name: X11
Vendor ID: 1452 (5ac)
Product ID: 33303 (8217)

Name: X16
Vendor ID: 1452 (5ac)
Product ID: 33304 (8218)

Name: X19B
Vendor ID: 1452 (5ac)
Product ID: 33306 (821a)

Name: X19C
Vendor ID: 1452 (5ac)
Product ID: 33309 (821d)

Name: X21
Vendor ID: 1452 (5ac)
Product ID: 33307 (821b)

Name: X21B
Vendor ID: 1452 (5ac)
Product ID: 33311 (821f)

Name: X238
Vendor ID: 1452 (5ac)
Product ID: 33425 (8291)

Name: X238D
Vendor ID: 1452 (5ac)
Product ID: 33428 (8294)

Name: X238E
Vendor ID: 1452 (5ac)
Product ID: 33430 (8296)

Name: X28
Vendor ID: 1452 (5ac)
Product ID: 33409 (8281)

Name: X28B
Vendor ID: 1452 (5ac)
Product ID: 33418 (828a)

Name: X29B
Vendor ID: 1452 (5ac)
Product ID: 33414 (8286)

Name: X29C
Vendor ID: 1452 (5ac)
Product ID: 33417 (8289)

Name: X29D
Vendor ID: 1452 (5ac)
Product ID: 33420 (828c)

Name: X33
Vendor ID: 1452 (5ac)
Product ID: 33419 (828b)

Name: X51
Vendor ID: 1452 (5ac)
Product ID: 33421 (828d)

Name: X52
Vendor ID: 1452 (5ac)
Product ID: 33423 (828f)

Name: X87
Vendor ID: 1452 (5ac)
Product ID: 33424 (8290)

File: CSRBluetoothHostControllerUSBTransport.kext
Name: AppleDesktopModule
Vendor ID: 1452 (5ac)
Product ID: 33284 (8204)

Name: AppleDesktopModule2
Vendor ID: 1452 (5ac)
Product ID: 33286 (8206)

Name: AppleIntegratedModule
Vendor ID: 1452 (5ac)
Product ID: 33287 (8207)

Name: ApplePortableModule
Vendor ID: 1452 (5ac)
Product ID: 33283 (8203)

Name: ApplePortableModule2
Vendor ID: 1452 (5ac)
Product ID: 33285 (8205)

Name: CSRUSBBluetoothHCIController
Vendor ID: 2578 (a12)
Product ID: 1 (1)

Name: DLink
Vendor ID: 2001 (7d1)
Product ID: 64513 (fc01)

Name: InitialCSRConfig
Vendor ID: 3641 (e39)
Product ID: 329 (149)
From this we can extract a list of unique vendor IDs and look up the company in the USB ID database:

Code:
5ac: Apple, Inc.
a12: Cambridge Silicon Radio, Ltd
a5c: Broadcom Corp.
45e: Microsoft Corp.
50d: Belkin Components
461: Primax Electronics, Ltd
b05: ASUSTek Computer, Inc.
7d1: D-Link System
e39: Smart Modular Technologies, Inc.
As expected, most of the devices have vendor ID 5ac which corresponds to Apple. The rest of the product IDs from 3rd party companies do not necessarily correspond to the brand of the device itself, but to the maker of the chip inside. For example, I have a Trust 18187 device which has a Cambridge Silicon Radio chip and presents with vid a12 and pid 1 and works out of the box. It's difficult to know which chip each bluetooth dongle uses so just trust other people's recommendations or do some research based on the product and vendor ids:

Code:
# Cambridge Silicon Radio, Ltd
Vendor ID: a12
Product ID: 1000

Vendor ID: a12
Product ID: f001

Vendor ID: a12
Product ID: 1016

Vendor ID: a12
Product ID: 1

# Microsoft Corp.

Vendor ID: 45e
Product ID: 9c

# Primax Electronics, Ltd

Vendor ID: 461
Product ID: 4d75

# Broadcom Corp.

Vendor ID: a5c
Product ID: 21ff

Vendor ID: a5c
Product ID: 4500

Vendor ID: a5c
Product ID: 2033

Vendor ID: a5c
Product ID: 2100

Vendor ID: a5c
Product ID: 2101

Vendor ID: a5c
Product ID: 2148

Vendor ID: a5c
Product ID: 2153

Vendor ID: a5c
Product ID: 2154

Vendor ID: a5c
v2198

Vendor ID: a5c
Product ID: 21e8

# ASUSTek Computer, Inc.

Vendor ID: b05
Product ID: 17cb

# Belkin Components

Vendor ID: 50d
Product ID: 65a

Vendor ID: 50d
Product ID: 17

Vendor ID: 50d
Product ID: 121

Vendor ID: 50d
Product ID: 16a

# D-Link System

Vendor ID: 7d1
Product ID: fc01

# Smart Modular Technologies, Inc.

Vendor ID: e39
Product ID: 149
Finally there might be some USB dongles with drivers for macOS, but given the variety of dongles with native support I would stay away from those.

PCI
We can differentiate two types of cards: original Apple Airport cards, and other 3rd party cards.

Apple
The Apple ones are cards that original Apple devices use, but can be purchased separately and used in a hackintosh with an adapter (Apple uses a proprietary connector for these cards).

There are older Airport cards that might still work with newer versions of macOS, but based on my research (in big part thanks to iFixit) I've come up with this list of modern Airport cards:

  • BCM94331CD (4 antenna, BT4, Wifi a/b/g/n): iMac Intel 21.5" or 27" (Late 2012-Early 2013)
  • BCM94360CD (4 antenna, BT4, Wifi a/b/g/n/ac): iMac Intel 21.5" or 27" (Late 2013-Late 2014)
  • BCM943602CD (4 antenna): Couldn't find corresponding model
  • BCM943602CDP (4 antenna, BT4 Wifi a/b/g/n/ac): iMac Intel 21.5" or 27" (Mid 2015-Late 2015)
  • BCM94360CS (3 antenna, BT4, Wifi a/b/g/n/ac): Mac mini A1347 (Late 2014), MacBook Pro 13" and 15" Retina (Late 2013-Mid 2014)
  • BCM943602CS (3 antenna, BT4, Wifi a/b/g/n/ac): MacBook Pro Retina (2015)
  • BCM94360CS2 (2 antenna, BT4, Wifi a/b/g/n/ac): MacBook Air (Mid 2013-2017)
  • BCM94360CSAX (3 antenna, BT4, a/b/g/n): MacBook Pro 13" and 15" Retina (Late 2012-Early 2013)
The main difference is the number of antenas and wether it supports wifi AC or not. In my opinion, the ones with support for wifi AC and 2 or 3 antennas are the best option, so those would be BCM94360CS, BCM943602CS and BCM94360CS2.

Be aware these do not use normal U.FL connectors for the antennas, but smaller, MHF4 connectors. This is better explained by metacollin in this post

In PCI and PCI-e cards, the bluetooth part always goes through USB, while wifi goes through the PCI bus. This means the card needs to connect to an internal USB header in the motherboard for the bluetooth to work. Mini-PCIe slots support both PCI and USB so you won't need to connect to an extra USB bus.

www.osxwifi.com is notably famous for providing ready-to-use kits for hackintoshes using these cards and adapters, but you can also purchase the card and the adapter separately in webs like Ebay, Aliexpress or even Amazon.

To search for an adapter search for the model + "mini pci-e adapter" or "pci adapter", depending on how you want to connect it. For example "BCM94360CS mini pci-e adapter".

In practice, any mini PCI-e adapter that works for one model would work for the rest since they use the same connector.

Finally, one advantage of Apple cards is they connect to the mouse/keyboard immediately after being powered, so you can use them in the BIOS or the Clover screen. Other PCI or USB bluetooth devices only connect once the operating system has loaded, so you will need and extra USB keyboard around if you want to touch the BIOS or Clover.

Windows drivers
To download drivers for these cards, we will use Apple's Bootcamp support software. We need to download a version of Bootcamp drivers that support one of the models where these cards came installed. We will choose MacBookPro12,1and use Brigadier to download the correct software:

  1. Download Brigadier.
  2. Run sh brigadier -m MacBookPro12,1.
  3. Open the DMG.
  4. Put the folder at /Volumes/Boot Camp/$WinPEDriver$/AppleBluetoothBroadcom64 in a USB drive.
  5. Put the file at /Volumes/Boot Camp/BootCamp/Drivers/Broadcom/BroadcomWirelessWin8x64.exe in a USB drive.
  6. Boot to Windows and install both drivers.
3rd party
If you have a PCI wifi/bluetooth card that is not supported natively, you might be able to make it work using Fake PCI ID or AirportBrcmFixup (for Wifi) and Broadcom PatchRAM (for Bluetooth). Please read the documentation to check if your chip is supported.

This thread has a very complete and technical guide on how to enable wifi/bluetooth in Broadcom in certain cards.

For PCI cards from other manufacturers, you might be able to get drivers from the vendor, or there might be other projects to add native support in macOS that I don't know about.

Handoff/Continuity
Using an Apple card you will get Handoff/Continuity working out of the box.

Using a 3rd party PCI card you might get Handoff/Continuity working out of the box, but it's not 100% sure. You might try to enable it using Continuity Activation Tool

Using 3rd party USB bluetooth dongles you will not get native Handoff/Continuity support. You might try to enable it using Continuity Activation Tool

Please contribute
If you have any suggestions on how can I improve the guide or things to add, please let me know, I'll keep updating the post.
 
Top