Jump to content

[USB] Mappatura porte su mobo Intel


dreamwhite

Recommended Posts

Salve a tutti,

premesso che l'autore originale di questa guida è @Gengik84, ho deciso di riscrivere la stessa per evitare confusioni o altro.

La seguente guida si applica solo a piattaforme con processore Intel e con bootloader OpenCore (odio Clover xD). In seguito vedrò di pubblicare una guida per piattaforme AMD.

 

La prima domanda che sorgerà spontanea a tutti: "perchè mai mappare le porte USB?"

 

Cito testuali parole di Aleksandar Vacić, prese da un articolo sul suo blog:

 

"When you choose some Mac model to emulate – say iMacPro1,1 – macOS will load USB hardware map for that particular machine. Apple knows exactly what their models use as hardware configuration so they don’t really need to scan for available ports or other hardware (like Windows or Linux must do). Everything is known before-hand. One thing they know is that none of their machines have more than dozen ports per USB controller thus in 10.11 (El Capitan) they introduced hard limit of 15 ports per controller."

 

Per coloro che hanno difficoltà a tradurre, banalmente questo trafiletto dice:

"Quando decidi un SMBIOS da emulare - diciamo iMacPro1,1 - macOS caricherà la mappatura USB per quella particolare macchina. Apple sa a memoria le configurazioni hardware delle sue macchine perciò non ha bisogno di scansionare le porte di altri hardware (come invece è fatto per Windows e Linux). Tutto è noto in anticipo. Una cosa che loro sanno bene è che nessuna delle loro macchine ha più di una dozzina di porte USB per singolo controller, così a partire da macOS 10.11 El Capitan, hanno introdotto un limite fisso di 15 porte massimo per controller".

 

Q: Ok e quindi? Cosa me ne potrebbe importare? 
A: Se hai più di 15 porte USB (contando le porte USB 2.0 e 3.0), potresti avere addirittura qualche porta disattiva, qualora queste superino il limite prestabilito.

 

Nel corso della guida verrà spiegato come calcolare il numero di porte USB presenti sulla propria macchina ed eventualmente come aggirare il limite delle 15 porte USB.

 

Requisiti
 

  • Sito e manuale della scheda madre/laptop
  • Dispositivo USB 2.0 (un mouse, una tastiera et similia)
  • Dispositivo USB 3.0 (una chiavetta USB 3.0, un HDD esterno et similia)
  • Chiavetta USB su cui mettere OpenCore
  • Tabelle ACPI estratte tramite SysReport
  • MaciASL
  • Hackintool
  • Saper montare una partizione EFI
  • Modificare il config.plist di OpenCore

 

Iniziamo

 

Come prima cosa è bene contare le porte USB presenti sulla propria macchina seguendo il seguente criterio:
 

  • le porte USB 2.0 vengono contate come porte singole 
  • le porte USB 3.0 vengono contate come se fossero due porte USB, per via della retrocompatibilità
  • eventuali periferiche collegate agli header interni della scheda madre vengono contate come porte singole (esempio: porte del front panel del case o Fenvi T919) 
  • non rientrano nella mappatura eventuali porte del controller ASMedia 
  • non rientrano nella mappatura eventuali HUB USB collegati alla macchina: questi sono pur sempre collegati ad una singola porta USB

 

Esempio

 

Scheda madre: Asus Z370 Prime A II (link sito)

 

Secondo la pagina ufficiale della scheda madre abbiamo fino a 12 porte USB (inclusi gli header USB della motherboard):

 

image.png.e3c2d200a27742498ae47b93e047df8c.png

 

La seguente è una foto del back panel della scheda madre stessa:

image.png.b84210e96a43a2c599a7f46dc41f6468.png

 

Procedendo da sinistra verso destra e dall'alto verso il basso, possiamo contare ben:

 

  • 1 porta USB 3.1 Gen 2 Type-A, appartenente al controller ASMedia (la porta color verde acqua)
  • 1 porta USB 3.1 Gen 2 Type-C, appartenente al controller ASMedia (la porta Type-C)
  • 2 porte USB 2.0 Type-A
  • 2 porte USB 3.1 Gen 1 Type-A

 

Q: Dunque quante porte della scheda madre dobbiamo mappare?
A: Escludendo le porte appartenenti al controller ASMedia, dobbiamo mappare le 2 porte USB 2.0 Type-A e le due porte USB 3.1 Gen 1 Type-A, per un totale di 6 porte USB:

 

  • 2 porte USB 2.0
  • 4 porte USB (2 USB 3.0 e le due porte USB 2.0 retrocompatibili con le USB 3.0) 

 

N.B. Qualora il numero di porte USB calcolate sia superiore a 15, bisogna abilitare il quirk config.plist/Kernel/Quirks/XhciPortLimit

 

1. Estraiamo le tabelle ACPI

 

Prima di spiegare come estrarre le tabelle ACPI ci terrei a ringraziare @A23SS4NDRO per il testing di questa procedura.

 

Per prima cosa, scaricare la EFI di Debug di OpenCore e dopo averla messa nella partizione EFI della chiavetta USB,  avviare il PC dalla stessa.

Compariranno diverse scritte: non c'è motivo di temere. Una volta arrivati al boot-menu spegnere il PC, riavviare su macOS e montare la partizione EFI della USB.

 

Oltre alla cartella EFI precedentemente posizionata, troverete due nuovi elementi:

 

  • cartella SysReport
  • opencore-DATA_DI_OGGI.txt

 

Il risultato è simile alla seguente foto:
 

image.png.8b828991a0ed4fb2f1643e122629f61a.png

 

Arrivati a questo punto, aprire la cartella SysReport/ACPI e identificare la tabella ACPI contenente la mappatura delle porte USB.

 

Q: Come diamine identifico questa tabella? 

A: Generalmente la tabella ACPI che definisce il comportamento delle porte USB si chiama SSDT-xxxxxx.aml: aprire ogni singolo file che si chiama così e cercare "HS01". Iterare questo procedimento finchè non viene identificata la tabella giusta. Qualora non sia stato possibile identificare la tabella ACPI, ripetere il procedimento appena spiegato con il file chiamato DSDT.aml

 

Esempio: nel mio caso la tabella ACPI che definisce il comportamento delle porte USB si chiama "SSDT-2-xh_OEMBD.aml". So per certo che è la tabella ACPI giusta dal momento che fra le external references ci sono le varie porte USB disponibili sulla mia scheda madre

 

image.png.02e0aa6203330c5b80531e1813cacbc9.png

 

Q: Ok. e adesso cosa faccio? 

A: Adesso occorre identificare il nome delle porte USB tramite Hackintool. E' bene iniziare dalle porte del back panel per poi procedere con le porte del front panel

 

2. Identificazione delle porte USB tramite Hackintool

 

Aprire Hackintool e recarsi nella sezione USB:

 

image.png.00d5eca10c9fcbcc1f500b19776ad08e.png

 

Cliccare sull'icona della scopa ed in seguito cliccare sull'icona del refresh button.

Il risultato è simile alla foto di cui sopra.

 

Arrivati a ciò, staccare ogni periferica USB esterna collegata al PC (mouse, tastiera ecc...). 

Prendere una periferica USB 2.0, come da requisiti, e collegarla ad una porta USB del back panel. Iterare questo procedimento per ogni porta USB.

Il risultato dovrebbe essere simile al seguente:

 

image.png.df9d987ef025d0bd938d1fe5777c1493.png


Nel mio caso, le seguenti porte USB2.0 sono state testate:

 

  • HS01 (è la porta retrocompatibile USB3.0)
  • HS03
  • HS04 (è la porta retrocompatibile USB3.0)
  • HS06 (lettore schede microSD)

 

N.B. non tutti i lettori di schede (micro)SD sono mappabili via USB. Dipende dalla motherboard in questione.

 

Fanno eccezione le seguenti porte, che sono interne alla motherboard (nel mio caso un laptop):

 

  • HS05
  • HS07

 

Ripetere la procedura per le porte USB 3.0 e segnarsi le porte.

Nel mio caso:
image.png.220c9ad289c80dff62ed2ebed11b1264.png
Le porte USB 3.0 sono:

  • SS01
  • SS03
  • SS04

 

3. Mappare le USB modificando il metodo _UPC

Prima di mappare le porte USB è bene segnare da qualche parte il valore della "Table Length", che trovate in cima al file, come da foto:
image.png.88be93fc92961d7d0c9bab31205a135a.png
Nel mio caso, la Table Length ha un valore di 1879. E' bene ricordare questo valore perchè servirà in seguito per caricare la mappatura patchata.

 

Iniziamo la mappatura aggiungendo il metodo GENG tramite il menù patch.

Trovate in allegato la patch: patch.txt.zip

 

image.png.00d19b13984d2ceb163ce76482a9a70d.png

 

Applicate la patch e cercate la prima porta USB 2.0 della lista che avete appuntato prima. Esempio: "HS01"

 

Nel mio caso, le porte USB sono definite come segue:
image.png.b601e6224bca136c70c72a404551a872.png
 


Secondo l'Advanced Configuration and Power Interface (ACPI) Specification, version 6.3, pagina 673, il metodo _UPC ha come valore di ritorno il seguente Package: 

 

Return Value Information:
Package {
 Connectable // Integer (BYTE)
Type // Integer (BYTE)
 Reserved0 // Integer
 Reserved1 // Integer)
}

 

Dove:

 

  • Connectable è un valore booleano che disattiva/attiva la porta USB (rispettivamente 0/1)
  • Type specifica la tipologia di connettore USB

 

Per semplificarvi la vita ho creato un elenco di valori di Type

 

image.png.a5a5d0f440c9e02f9ee8ae4fdae3aa1b.png

 

N.B.  lo "switch" presente nella porta USB identificata dal tipo 0x09, sta ad indicare che la porta assume il comportamento di una USB3.0 in funzione del verso in cui viene inserita la periferica

 

Q: Dunque come mappo? 
A: Devi cambiare il valore di ritorno del metodo "_UPC" come segue:
 

  • le porte USB 2.0 sono identificate dal nome "HSxx" e come valore di Type "0x00" se sono porte USB 2.0 appartenenti al back panel, altrimenti "0xFF" (esempio: la Fenvi T919 ha come Type 0xFF)
  • le porte USB 3.0 sono identificate dal nome "SSxx" e come valore di Type "0x03" o addirittura 0x07 qualora sia presente l'icona di una batteria di fianco alla porta stessa (che sta ad indicare "powered") 
  • non occorre modificare il metodo "_UPC" per eventuali porte USB Type-C

 

Dunque nel caso di una porta USB 2.0 presente sul back panel, avrò un risultato simile a quanto segue:
 

image.png.7cef18af20f5fd74f7bec60b1f31f685.png

 

dove il primo parametro - "One" - sta ad indicare che la porta è attiva, mentre "Zero" indica la tipologia di connettore.

Iterare questo procedimento per ogni porta USB 2.0 del back panel.

 

N.B. Per le porte USB 2.0 del front panel il valore di Type deve essere "0xFF":
image.png.aeca7ca3732d22ebac846b8c8b57aeb5.png

 

Per le porte USB 3.0 invece, il valore di Type è "0x03" (o in casi estremi "0x07"): 
 

image.png.c44562fa3c686d077e0f144d238d1ee2.png

 

Per tutte le altre porte USB non rilevate dalla mappatura (ossia quelle non evidenziate in verde su Hackintool) assicurarsi che il metodo "_UPC" ritorni il valore "GUPC(Zero)". 
Esempio:
 

image.png.23234bddc4ae55638d679253659922a4.png

 

Una volta conclusa la mappatura delle porte USB, salvare il file e posizionarlo nella cartella "OC/ACPI" della EFI.

Infine, aprire il config.plist e, dopo aver aggiunto l'SSDT della mappatura USB (consiglio l'utilizzo di OC-Snapshot) recarsi nella sezione ACPI/Block e aggiungere quanto segue:
image.png.fd0cdb8a1b398f7d9090c3d6bca46a46.png

 

Sostituire il valore del campo "OemTableId" con il "Table Id",che è possibile ricavare dallo step 3 alla voce "OEM Table Id", convertito in esadecimale.

 

N.B. per evitare il drop di tabelle ACPI indesiderate, consiglio vivamente di lasciare vuoto il campo "OemTableId" ed utilizzare il campo "TableLength"

 

Salvare il config.plist e riavviare.

 

Per assicurarsi che la mappatura delle porte USB sia andata a buon fine, ripetere lo step 2 ed assicurarsi che siano presenti ed evidenziate in verde solo le porte USB mappate.

 

Credits
 

Ci tengo a ringraziare particolarmente:

 

  • @Gengik84 per il suo thread originale (link) e la patch GENG che ho convertito in patch MaciASL
  • @A23SS4NDRO per avermi aiutato con OpenCore e la creazione della EFI di Debug
  • Il progetto ACPICA
  • Apple
  • Acidanthera per lo sviluppo di OpenCore e MaciASL
  • Headkaze per lo sviluppo di Hackintool

 

EFI OC 0.6.0 Debug.zip

Edited by dreamwhite
  • Like 1
  • Thanks 2
  • +1 4
Link to comment
Share on other sites

  • 1 year later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • There are no registered users currently online
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.