Tuesday, March 12, 2019

Enabling VMware SVGA driver in Icaros 2.2.7

Work on Icaros 2.2.7 continues. You know we finally got a driver for VMware SVGA (and our supporters already got the chance to test it) but, in the next distribution release, it won't be enabled by default. We felt, in fact, it was still too early to be 'in production': speed issues and graphic artifacts are still present so, for now, VESA modes should be a better default choice for VMware users. If you wish to test the new driver, and use wider resolutions like 2K and 4K, however, you will need to use the VMware driver, since VESA modes can't handle them. The following video shows how you're supposed to enable the VMware SVGA driver with Icaros 2.2.7.

I'd love to spend a couple of words about the topic "how can Icaros understand it's running under VMware?". It's a good question, specially for an almost-completely-dumb guy like me about coding. There was simply no way, for me, to code something that would be able to probe the video card, so I needed to check among already available tools on AROS. PCItool can read the system configuration and list PCI components, however I could not run it with a parameter to save the config somewhere, so I needed something else.

I recalled there is a 'Tests' directory in AROS nightly builds (Extras/Tests on Icaros) with many useful CLI programs inside. There MUST have been something useful to me, and I found it very soon: a program called pcilist in Tests/Misc. This little gem produces a bare list of connected PCI devices in their basic vendorid:productid form so, assuming that 15AD is VMware's vendor ID and 0405 is VMware SVGA II card product ID, I only had to grep the list for the string '15AD:0405': if it occurs, the card is present, and the new driver is suitable. Icaros 2.2.7 will have pcilist in C and a new script in S called 'testvmware' to check wether the card is available or not. If you wish to reproduce this experiment on your current installation, just:

1. copy pcilist from extras:Tests/Misc to sys:C
2. be sure you've got grep in Development/bin (or copy it to sys:C as well)
3. open a shell and create a script like the following:

pcilist >t:pci
grep -c "15AD:0405" t:pci >t:cnt

if ${t:cnt} GT 0
  requestchoice "YES!" "VMware SVGA II Detected" "Continue" >nil:
requestchoice "NO!" "VMware SVGA II NOT Detected" "Continue" >nil:

delete t:cnt >NIL:
delete t:pci >NIL: