📘
Advanced Guide
HomeInstall GuideBasic GuideGPU BuyerWIFI BuyeriOS
  • Install
  • Basic Guide
  • General
    • EFI Opencore No ACPI
    • OpenCore Debug
    • Convert Bootloader
    • Cách mod bios
    • Fake CPU ID
    • Fix RTC write issues
    • HotPlug Thunderbolt 3
    • Inject USB Manual
    • Sử kext S/L/E trên bigsur
    • Disable unsupport PCIe
  • Audio
    • Patch audio với VoodooHDA
    • Patch Apple HDA
  • ACPI advance
    • Chi tiết về ACPI
    • Tìm hiểu về ASL
    • Patch DSDT Phần 1
    • Patch DSDT Phần 2
    • Patch DSDT Phần 3
    • Patch DSDT phần 4
    • Use method _STA
    • Disable Unsupported Nvme
    • Map usb via SSDT
    • Fix Shut down
  • Laptop Specifics
    • Fix trackpad
    • Patch pin
    • Disable CFG-Clock
    • Fix Hotkeys
  • Connector
    • Fix Connector
    • Fix HDMI Audio
    • Patch GMA GPU
    • Patch Card đồ họa NVIDIA
    • Patch Card đồ họa AMD
    • Fixes for slow AMD GPU
    • Patch Connect Type/ Force RGB/ Inject EDID
Powered by GitBook
On this page
  • Chuẩn bị
  • Phân tích SSDT-XHCI
  • Phân tích SSDT-xh_xxxxx
  • Kiểm tra Port Usb
  • Tiến hành
  1. ACPI advance

Map usb via SSDT

PreviousDisable Unsupported NvmeNextFix Shut down

Last updated 10 months ago

Như các bạn đã biết, đối với map usb mình đã làm rất nhiều guide về rất nhiều cách khác nhau cho cả amd và intel xem chi tiết và . Nhưng hôm nay mình xin giới thiệu đến các bạn một cách map usb thông qua SSDT. Vậy các này có những ưu điểm gì?

  1. Đơn giản quản lý

    • Chỉ có 1 file SSDT-XHCI mà không cần thêm các patch phụ

  2. Luyện kỹ năng patch DSDT

  3. Không cần drop SSDT

  4. Làm cho EFI của bạn trong có vể "pro" hơn

Bây giờ thì chúng ta tiến hành thôi nhé

Chuẩn bị

B1: Các bạn tải file SSDT-XHCI mẫu mình đã tạo sẵn

B2: Tải hoặc

B3: Tải UsbtoolBox

Nếu như ở MacOs thì bạn tải hackintool

B4: Dump folder orgi hoặc sys report theo hướng dẫn

B4: Mở file SSDT-XHCI vừa tải ra và bây giờ chúng ta sẽ tiến hành phân tích

Phân tích SSDT-XHCI

Sau khi mở file SSDT-XHCI ra các bạn có thể thấy là các device usb sẽ có cùng một cấu trúc Package

                    Device (HS01)
                    {
                        Name (_ADR, One)  // _ADR: Address
                        Name (_UPC, Package (0x04)  // _UPC: USB Port Capabilities
                        {
                            Zero, //Giá trị thứ 1
                            Zero, //Giá trị thứ 2
                            Zero, //Giá trị thứ 3
                            Zero  //Giá trị thứ 4
                        })
                    }

Bây giờ chúng ta sẽ tiến hành phân tích nhé:

  • Device (HS01) : Đây là device usb port tìm hiểu cụ thể ở phần tiếp theo.

  • Name (_ADR, One) : Ở đây là Address của device

    • Nói cách khác thì đây chính là thứ tự của port này trong root hub

    • Có thể dễ dàng tìm được giá trị này bằng cahcs chuyển thứ tự của port từ decimal sang hex

  • Name (_UPC, Package (0x04): Ở đây là đang call qua method UPC

  • Các giá trị của Package

    • Giá trị thứ 1 dùng để khai báo tình trạng của port

      • Disable là Zero hoặc 0x00

      • Enable là các giá trị khác

        • Nhưng thường người ta sẽ sử dụng 0xFF hoặc One để biểu thị trạng thái enable

    • Giá trị thứ 2 dùng để khai báo port type xem chi tiết tại bảng phía dưới

    • Giá trị thứ 3 và thứ 4 là giá trị mặc định không cần động vào

0x00

USB Type A

0x01

USB Mini-AB

0x02

USB Smart Card

0x03

USB 3 Standard Type A

0x04

USB 3 Standard Type B

0x05

USB 3 Micro-B

0x06

USB 3 Micro-AB

0x07

USB 3 Power-B

0x08

USB Type C (USB 2 only)

0x09

USB Type C (with switch)

0x0A

USB Type C (w/o switch)

0xFF

Built-in

Đây là bảng giá trị Port Type

Tóm lại qua phần này chúng ta sẽ chỉ cần quan tâm đến các phần sau

  • Device usb port

  • Address

  • Giá trị thứ 1 và giá trị thứ 2 của Package

Phân tích SSDT-xh_xxxxx

Ở đây là file SSDT các bạn dump được ở folder origi hoặc sys report. Các file này không cố định tên các bạn phải mở từng file và xem cấu trúc của nó

Ở đây là cấu trúc 1 file SSDT chứa các thông tin về usb chúng ta hãy cũng nhau phân tích một chút nhé

Chú ý đến phần tô đỏ ta sẽ có

  1. List các port usb

    • Ở đây cũng là phần để các bạn tìm được thứ tự của device port usb bằng cách đếm các port này

    • Ví dụ: hs01 thì thứ tự là 1 chuyển sang hex có dạng 0x01

      • hoặc ss01 có thứ tự là 17 chuyển sang hex có dạng 0x11

  2. Ở đây là ACPI path của controller usb

Mở rộng

Như ở trên ta có thể thấy ở sẽ có 26 port (HS01 --> HS14 | USR1 --> USR2 | SS01 --> SS10). Nhưng macos chỉ giới hạn 15 port vì vậy ta sẽ cần disable các port rỗng

Theo mặc định thì USR1 và USR2 thì sẽ luôn phải disable bởi vì macos sẽ không hỗ trợ hai chuẩn này. Để tìm hiểu cụ thể hơn về các chuẩn này chúng ta hãy xem dưới đây

  • HS01…HS14

    • HS = High Speed Ports

    • USB 2.0 only

    • 480 mbit/s

  • SS01…SS10

    • SS = Super Speed Ports

    • USB 3.0, 3.1, 3.2

    • 5 to 20 Gbit/s

  • USR1/2

    • Không được support bởi macos

    • Intel AMT

Kiểm tra Port Usb

B1: mở usbtoolbox

B2: Nhấn D

B3: Chuẩn bị 2 chiếc usb

  • 1 chiếc usb 2.0

  • 1 chiếc usb 3.0

B4: Cắm lần lượt từng chiếc usb vào tất cả các cổng và quan sát phân tích ở hình bên dưới

  1. Đây là thứ tự port của nó để tìm được device name usb port thì có thể xem trong ssdt

    • Ví dụ: port 1 tương ứng hs01

      • Sắp xếp theo thứ tự port

  2. Port type

    • Tra theo bẳng usb port type ở trên

  3. Các port màu xanh là enable

    • Màu trắng là port rỗng

Tiến hành

B1: Quan sát các port có sẵn ở trong SSDT-XHCI và SSDT-xh_xxxxx

Port nào còn thiếu thì thêm vào bằng cách copy và sửa ADR, Device()

B2: Các bạn mở file SSDT-XHCI

B3: thay thế các scope thành acpi path controller

Ví dụ: acpi path controller của mình có dạng _SB.PC00.XHCI thì ta sẽ thay thế nó như ảnh

B4: Chỉnh sửa các giá trị của Package trong từng device usb controller

  • Tìm đến các device enable và chính sửa giá trị thứ 1 thành 0xFF

Ví dụ ta có:
 Port 2 | USB 2.0 | Type A (guessed)
 
 //Có nghĩa là:
   //HS02 có type port là usb 2.0 type A

 //Như vậy ta sẽ set như sau
 
 //Before
                     Device (HS02)
                    {
                        Name (_ADR, 0x02)  // _ADR: Address
                        Name (_UPC, Package (0x04)  // _UPC: USB Port Capabilities
                        {
                            Zero, 
                            Zero, 
                            Zero, 
                            Zero
                        })
                    }
                    
//After

                    Device (HS02)
                    {
                        Name (_ADR, 0x02)  // _ADR: Address
                        Name (_UPC, Package (0x04)  // _UPC: USB Port Capabilities
                        {
                            0xFF, // 0xFF là để enable port này
                            0x00, // 0x00 là usb 2.0 type A
                            Zero, 
                            Zero
                        })
                    }

B5: Chỉnh tương tự cho đến hết các device

B7: Thêm SSDT vừa tạo được vào EFI --> OC --> ACPI và Snapshot

Hoặc EFI --> Clover --> ACPI --> Patch

B8: Reboot và tận hưởng thôi

Convert decimal to hex

Đối với các bạn dùng hackintool thì có thể tham khảo thông qua hướng dẫn mapusb

Tiếp tục chỉnh sửa giá trị thứ 2 theo type port đã xác dịnh ở phần và dựa vào bảng type port

B6: Comlie SSDT và biên dịch thành .aml theo hướng dẫn

Source tham khảo:

tại đây
tại đây
https://github.com/5T33Z0/OC-Little-Translated/tree/main/03_USB_Fixes/ACPI_Mapping_USB_Ports
trên
tại đây
tại đây
MacIasl
Xiasl
tại đây
tại đây
tại đây
tại đây
tại đây
SSDT-3-xh_cfht4.dsl
Before
After