Jump to content

[Guida] Modifica del DSDT - Le basi e le fix più comuni


thefoul
 Share

42 posts in this topic

Recommended Posts

Per concessione dell'EvOSX86 Team a cui vanno i miei più sentiti ringraziamenti.

 

Le seguenti Guide sono state tradotte/riadattate dallo Spagnolo.

Per il materiale in lingua originale potete andare su:

http://www.osx86.es/?page_id=288

 

Guida alla modifica del DSDT - 1a parte - Le Basi

Guida_alla_modifica_del_DSDT___1a_parte___Le_Basi.pdf.zip

 

Guida alla modifica del DSDT - 2a parte - TM fix

Guida_alla_modifica_del_DSDT___2a_parte___TM_fix.pdf.zip

 

Guida alla modifica del DSDT - 3a parte - aggiunta di codice per le schede video

Guida_alla_modifica_del_DSDT___3a_parte___aggiungere_codice_per_le_schede_video.pdf.zip

 

Guida alla modifica del DSDT - 4a parte - speedstep nativo mediante DSDT

Guida_alla_modifica_del_DSDT___4a_parte___speedstep_nativo_mediante_DSDT.pdf.zip

 

*********** Disclaimer ****************

Queste guide non vi renderanno dei maghi: molte cose sono purtroppo date per scontate.

 

Io stesso devo ancora ri-studiarle e compendiarle con moltissime altre info provenienti da questo forum (ad es. dal topic "DSDT a pezzi" rispetto al quale questo è propedeutico).

*************************************

 

Nella speranza che questi file possano aiutarvi a capire un pò di più.

 

P.S.: Rilancio la mia proposta ai vari scrax, smith@@, rasone, etc. e agli altri utenti in possesso di nozioni avanzate sul DSDT.

Sarebbe bello compendiare quanto trovato da loro sull'argomento con materiale più basilare come questo a vantaggio di tutti gli utenti.

 

E' mia convinzione che più si allarga la base più la gente diventa man mano autonoma, sfoltendo così tanti post inutili ed alleggerendo il compito di chi aiuta.

  • Like 3
Link to comment
Share on other sites

Premetto che anch'io vorrei sistemarmi il mio DSDT e ottimizzarlo ad-hoc.

C'è da dire che non è una cosa alla portata di tutti gli utenti e chiedo a questo punto lumi a chi è più esperto quali effettivi vantaggi porta un DSDT ottimizzato su un sistema già perfettamente stabile di suo.

Il mio ad esempio boota in circa 40 secondi(dalla comparsa di chamaleon),la parte del DSDT che ho modificato riguarda solo RTC che nel mio caso è d'obbligo avendo una gigabyte altrimenti mi si resetterebbe il bios ogni volta.

Per il resto uso solo 4 kext in croce nella cartella extra di chamaleon e nessun kext aggiuntivo nella root exstension di snowLeopard.

Nel mio caso,avendo un sistema perfettamente stabile,a cosa potrebbe servire ottimizzare ulteriormente il DSDT?

 

infine...leggo di gente che con il DSDT ottimizzato ha un OSX che parte in addirittura in 20 sec.!

Fatemi capire ma il calcolo del tempo quando deve partire?

Dalla comparsa del Chamaleon?

20 sec. mi sembrano davvero pochissimi e framcamente neanche un MAC Book originale impiega così poco tempo ad essere operativo(provato questa mattina in un media world). ;)

Link to comment
Share on other sites

Ottimo lavoro, inoltre mi sembra un promettente inizio per uno sviluppo ulteriore.

 

Se mi mandi la tua email in PM ti posso inviare i file .rtfd editabili cosi magari iniziamo a fare una guida totalmente made in Italy con tutte le procedure per le soluzioni testate e funzionanti.

 

L'esempio che mi viene di corsa in mente e' la panoramica delle varie sezioni del DSDT ...e pure la sezione su come razionalizzare il codice (che ne presuppone a sua volta una sulla sintassi).

 

Per ora studio e cerco di prendere dimestichezza...poi si vedra'.

Link to comment
Share on other sites

Se mi mandi la tua email in PM ti posso inviare i file .rtfd editabili cosi magari iniziamo a fare una guida totalmente made in Italy con tutte le procedure per le soluzioni testate e funzionanti.

 

L'esempio che mi viene di corsa in mente e' la panoramica delle varie sezioni del DSDT ...e pure la sezione su come razionalizzare il codice (che ne presuppone a sua volta una sulla sintassi).

 

Per ora studio e cerco di prendere dimestichezza...poi si vedra'.

 

Per quanto riguarda il DSDT sono solo un principiante, mi sembra che Scrax, Smith@@ e Barbonenet siano gli amici più ferrati in questo aspetto (importante) del nostro Hackintosh.

 

Giorgio

Link to comment
Share on other sites

Premetto che anch'io vorrei sistemarmi il mio DSDT e ottimizzarlo ad-hoc.

C'è da dire che non è una cosa alla portata di tutti gli utenti e chiedo a questo punto lumi a chi è più esperto quali effettivi vantaggi porta un DSDT ottimizzato su un sistema già perfettamente stabile di suo.

....

Nel mio caso,avendo un sistema perfettamente stabile,a cosa potrebbe servire ottimizzare ulteriormente il DSDT?

 

Guarda....il mio punto di vista è questo.

Nel tuo caso (fortunato) il sistema è gia' quasi a posto di suo.

Probabilmente l'utilizzo di un DSDT con codice piu' razionale si ridurrebbe forse ad un mero esercizio stilistico per abbassare il boot di qualche secondo.

 

In molti altri casi (vedi il mio: ho un DSDT con 7 errori e una caterva di warning) l'editing del DSDT e' l'unico modo per sopperire alle carenze dei BIOS fatti con i piedi: il BIOS del portatile in firma non mi permette di spegnere HT ne' TurboBoost.

 

Ergo o me la vedo col caro DSDT oppure mi tengo 1 solo core attivo su 8 a disposizione.

 

Questo e' un singolo esempio...ma vuoi mettere avere le chiavi per far funzionare tutto l'hardware che serve?

Link to comment
Share on other sites

OT: Solo una precisazione: il bios dei portatili non è fatto con i piedi, semplicemente non è fatto per mac osx, per quello per cui è progettato (windows) fa il suo dovere.

 

Giorgio

Link to comment
Share on other sites

P.S.: Rilancio la mia proposta ai vari scrax, smith@@, rasone, etc. e agli altri utenti in possesso di nozioni avanzate sul DSDT.

Sarebbe bello compendiare quanto trovato da loro sull'argomento con materiale più basilare come questo a vantaggio di tutti gli utenti.

Bella cosa, ho aggiunto i link ai miei post sul dsdt, con il ink a questo post, per chi vuole iniziare col dsdt, le guide in spagnolo mi eran servite anche a me all'inizio...

Link to comment
Share on other sites

  • 2 weeks later...
  • 2 weeks later...
Guest James.1979

Beato voi che trovato tutto stò tempo per mettervi con comodo e smanettare sul DSDT..

Mannaggia e chi non ha il tempo?

 

Io ad esempio, ho problemi con la scheda video su snow.. riconosciuta con efi o con injector ma lag del mouse pazzesco.. ho provato ad estrarrere il DSDT da mac con DSDTPatcher messo in extra, ma a nulla è servito.. immagino che andrebbe ottimizzato modificato e molto probabilmente si risolverà finalmente il mio problema, ma aihmè per uno che è a zero con il DSDT e per di più con pochissimo tempo a disposizione?! Chisà che magari tra di voi c'è qualche anima pia che mi aiuterebbe.. riconoscerei la cosa. In che modo lo scoprirete solo vivendo :unsure:-_-

 

Se qualcuno vuole aiutarmi me lo dica che posto il DSDT con i relativi ID e qual che vi serve insomma.

 

Un sentito grazieeeeeeeee!

Link to comment
Share on other sites

Beato voi che trovato tutto stò tempo per mettervi con comodo e smanettare sul DSDT..

Mannaggia e chi non ha il tempo?

 

Io ad esempio, ho problemi con la scheda video su snow.. riconosciuta con efi o con injector ma lag del mouse pazzesco.. ho provato ad estrarrere il DSDT da mac con DSDTPatcher messo in extra, ma a nulla è servito.. immagino che andrebbe ottimizzato modificato e molto probabilmente si risolverà finalmente il mio problema, ma aihmè per uno che è a zero con il DSDT e per di più con pochissimo tempo a disposizione?! Chisà che magari tra di voi c'è qualche anima pia che mi aiuterebbe.. riconoscerei la cosa. In che modo lo scoprirete solo vivendo :unsure:-_-

 

Se qualcuno vuole aiutarmi me lo dica che posto il DSDT con i relativi ID e qual che vi serve insomma.

 

Un sentito grazieeeeeeeee!

 

DSDTpatcher corregge solo HPET e poche altre cose, per questo non è servito per il tuo problema.

 

prova a rimuovere /System/Library/Extensions/AppleUpstreamUserClient.kext

Link to comment
Share on other sites

Guest James.1979
DSDTpatcher corregge solo HPET e poche altre cose, per questo non è servito per il tuo problema.

 

prova a rimuovere /System/Library/Extensions/AppleUpstreamUserClient.kext

 

Grazie scrax per la risposta, ho già eliminato AppleUpstreamUserClient.kext , ho anche installato il disabler.kext ma a nulla è servito.. eppure la scheda con ideneb 10.5.8 selezionando NVEnabler funziona benissimo ..grafica fluida e nessun lag del mouse..

 

ascolta se vuoi darmi una mano (te ne sarei molto grato) visto che tu sei un guru sul DSDT ti pregherei di intervenire qui onde evitare di finire OT.

 

Grazie mille scrax

Link to comment
Share on other sites

  • 1 month later...
ciao thefoul,

 

seguendo la guida e cercando nel mio caso display@0 non lo trova!

sai dirmi perchè?

 

saluti

 

Ciao geminimac...

quello che interessa a te per estrarre/crearti la iniezione via DSDT si trova nel nodo giusto sopra...

ovvero proprio nel "display@0"

 

EDIT: Io faccio riferimento alla foto presente nel tuo post...

In caso di dubbi posta il tuo IOREG che gli diamo una occhiata...

 

Fabio

Link to comment
Share on other sites

ciao Fabio,

 

grazie mille per avermi risposto...

 

facendo riferimento alla schermata postata cosa devo prendere in considerazione?

 

cerco POP1@1? è quello il nodo giusto?

 

saluti

 

Ciao geminimac

Si da quello che vedo nel tuo shot la scheda grafica e' all'interno del device P0P1

quindi i dati che ti servono sono dentro display@0, ti faccio un esempio il mio...

 

dal mio IOREG

io ho il Device PEG3 (il mio DSDT e' molto editato ;))

all'interno del quale ho creato un sotto-device che ho chiamato GFX3 che nel tuo caso sarebbe display@0 (che non esiste all'interno del DSDT ma puo' essere creato e nominato a piacere)

peg3.jpg

e questo e' quello che vedo in GFX3 (dove attengo il NVcap e registro e memoria ecc...

gfx3.png

e questo e' quello che ho estratto editato e aggiunto nella tabella DSDT

(Sono anche presenti aggiunte estetiche come lo slot)

[size=1]            Device (PEG3)
           {
               Name (_ADR, 0x00030000)
               Device (GFX3)
               {
                   Name (_ADR, 0x02000000)
                   Method (_DSM, 4, NotSerialized)
                   {
                       Store (Package (0x1C)
                           {
                               "AAPL,slot-name", 
                               Buffer (0x0A)
                               {
                                   "PCI-E 16x"
                               }, 

                               "@0,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@0,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@0,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-A"
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@1,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@1,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-B"
                               }, 

                               "NVCAP", 
                               Buffer (0x18)
                               {
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                   /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "NVPM", 
                               Buffer (0x1C)
                               {
                                   /* 0000 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0018 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04)
                               {
                                   0x00, 0x00, 0x00, 0x60
                               }, 

                               "device_type", 
                               Buffer (0x0C)
                               {
                                   "NVDA,Parent"
                               }, 

                               "model", 
                               Buffer (0x1C)
                               {
                                   "Nvidia Quadro FX 5600 [G80]"
                               }, 

                               "rom-revision", 
                               Buffer (0x09)
                               {
                                   "DSDT ROM"
                               }, 

                               "reg", 
                               Buffer (0x78)
                               {
                                   /* 0000 */    0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x02, 
                                   /* 0018 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0020 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
                                   /* 0028 */    0x14, 0x00, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0030 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0038 */    0x00, 0x00, 0x00, 0x20, 0x1C, 0x00, 0x02, 0x02, 
                                   /* 0040 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0048 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 
                                   /* 0050 */    0x24, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0058 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0060 */    0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x02, 0x02, 
                                   /* 0068 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0070 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
                               }
                           }, Local0)
                       MCDP (Arg2, RefOf (Local0))
                       Return (Local0)
                   }
               }

               Method (_PRW, 0, NotSerialized)
               {
                   Return (GPRW (0x09, 0x04))
               }

               Method (_PRT, 0, NotSerialized)
               {
                   If (PICM)
                   {
                       Return (AR13)
                   }

                   Return (PR13)
               }
           }
[/size]

 

e questo e' quello che vedo in System Profiler

85848151.jpg

Buon divertimento

Fabio

Link to comment
Share on other sites

allora provo a seguire le tue dritte...

 

se non ci riesco fatti vivo in questi giorni che mi aiuti un pò...

 

grazie ancora! ;)

 

saluti

:D

 

Ti dico solo che magari la parte del reg (che dovrai fare a manina) e' un po noiosa e complicata...

piccolo esempio... Dal mio IOREG--> PEG3--->GFX3.. seleziono NVCAP, copio e trasformo da cosi':

a cosi'

0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00

 

...

 

E' una operazione noiosa ed e' facile commettere errori... (ma essenzialmente basta aggiungere 0x e la virgola a parte l'ultimo "blocco")

 

Fabio

Link to comment
Share on other sites

ciao Fabio,

 

ecco i primi quesiti che ti pongo:

 

allora io ho estratto Nvcap, Nvpm e reg dallo IOREG e li ho trasformati in 0x...

leggendo tutta la pappardella sulla guida PDF del 3D non mi è chiaro come ottenere il codice nel punto dove dici:

 

"e questo e' quello che ho estratto editato e aggiunto nella tabella DSDT".

una volta estratti gli Nvcap e Nvpm-Reg come arrivo al resto del codice?

copio ed incollo il tuo codice modificando solo Nvcap ecc.?

per editare lo IOREG aggiungendo un nuovo nodo come faccio?

ho provato ad usare il tuo codice postato modificando la sezione Nvcap, Nvpm, reg...l'ho inserito nel loader e poi dopo aver salvato il tutto ho provato a compilarlo con terminale ma mi da questo:

 

"Error 4068, non posso aprire il file....(no such file o directory)" e dopo ciò mi genera due file in formato .src ed .hex

 

saluti

Link to comment
Share on other sites

ecco il mio IOREG...

 

 

 

saluti

 

Ciao geminimac

 

Questo e' quello che devi aggiungere al tuo DSDT

la parte in colore BLU e quella riguardante la iniezione della tua 9800

[size=1]
           Device (P0P1)
           {
               Name (_ADR, 0x00010000)
[color="#0000FF"]                Device (GFX1)  // Questo sarebbe un rename estetico .. invece di avere dsplay@0
               {
                   Name (_ADR, Zero)
                   Method (_DSM, 4, NotSerialized)
                   {
                       Store (Package (0x1C) // per calcolarti il valore del package moltiplica per due il totale di ogni iniezione
                                                         // es: qui abbiamo 14 valori (14*2=28) 28(decimale)=1C(esadecimale)
                           {
                               "AAPL,slot-name",  // Questa parte e' puramente estetica 
                               Buffer (0x0A)        // il buffer deve avere il numero di caratteri + 1 in esadecimale
                               {                          // Vanno contati anche gli spazi
                                   "PCI-E 16x"       //  PCI-E 16x=9 (9+1) =10(decimale) 0A (Esadecimale)
                               },                         //

                               "@0,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@0,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@0,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-A"
                               }, 

                               "@1,compatible", 
                               Buffer (0x0B)
                               {
                                   "NVDA,NVMac"
                               }, 

                               "@1,device_type", 
                               Buffer (0x08)
                               {
                                   "display"
                               }, 

                               "@1,name", 
                               Buffer (0x0F)
                               {
                                   "NVDA,Display-B"
                               }, 

                               "NVCAP", 
                               Buffer (0x18)
                               {
                                   /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 
                                   /* 0008 */    0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "NVPM", 
                               Buffer (0x1C) // qui sono 28 = 1C
                               {
                                   /* 0000 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0018 */    0x00, 0x00, 0x00, 0x00
                               }, 

                               "VRAM,totalsize", 
                               Buffer (0x04)
                               {
                                   0x00, 0x00, 0x00, 0x40
                               }, 

                               "device_type", 
                               Buffer (0x0D)
                               {
                                   "NVDA,GeForce"
                               }, 

                               "model", 
                               Buffer (0x17)
                               {
                                   "nVidia GeForce 9800 GT" // Anche qui puoi scrivere cosa vuoi... occhio sempre al buffer
                               }, 

                               "rom-revision", 
                               Buffer (0x09)
                               {
                                   "DSDT ROM"  // Anche qui puoi scrivere quello che vuoi ma il buffer deve combaciare
                               }, 

                               "reg", 
                               Buffer (0x78)
                               {
                                   /* 0000 */    0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x02, 0x02, 
                                   /* 0018 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0020 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 
                                   /* 0028 */    0x14, 0x00, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0030 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0038 */    0x00, 0x00, 0x00, 0x10, 0x1C, 0x00, 0x02, 0x02, 
                                   /* 0040 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0048 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 
                                   /* 0050 */    0x24, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0058 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0060 */    0x80, 0x00, 0x00, 0x00, 0x30, 0x00, 0x02, 0x02, 
                                   /* 0068 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                   /* 0070 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00
                               }
                           }, Local0)
                       DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                       Return (Local0)
                   }
               }[/color]

               Method (_PRW, 0, NotSerialized)
               {
                   Return (GPRW (0x09, 0x04))
               }

               Method (_PRT, 0, NotSerialized)
               {
                   If (PICM)
                   {
                       Return (AR01)
                   }

                   Return (PR01)
               }
           }[/size]

 

per usufruire della iniezione appena proposta ha bisogno del methodo DGTP

che va inserito prima dell'ultima graffa in fondo al DSDT (almeno io per comodita' il metodo/i li inserisco in coda)

Ecco quello di qui hai anche bisogno:

[size=1]    Method (DTGP, 5, NotSerialized)
   {
       If (LEqual (Arg0, Buffer (0x10)
               {
                   /* 0000 */    0xC6, 0xB7, 0xB5, 0xA0, 0x18, 0x13, 0x1C, 0x44, 
                   /* 0008 */    0xB0, 0xC9, 0xFE, 0x69, 0x5E, 0xAF, 0x94, 0x9B
               }))
       {
           If (LEqual (Arg1, One))
           {
               If (LEqual (Arg2, Zero))
               {
                   Store (Buffer (One)
                       {
                           0x03
                       }, Arg4)
                   Return (One)
               }

               If (LEqual (Arg2, One))
               {
                   Return (One)
               }
           }
       }

       Store (Buffer (One)
           {
               0x00
           }, Arg4)
       Return (Zero)
   }[/size]

 

Sostanzialmente questa iniezione fa la stessa identica cosa della stringa EFI

 

Fabio

Link to comment
Share on other sites

 Share

×
×
  • Create New...