USB drivers for OS/2 v. 10.251 (31/10/2024, Lars Erdmann) |
Readme/What's new |
******************************************************************
*** WARNING: This software is provived without any warranties. ***
*** It has not been proven to be free of defects. ***
*** Any use is at the user's own risk! ***
******************************************************************
"CMD", "VIA", "INTEL", "ETEQ", "OPTI", "SIS", "NEC", "ALI", "ACER",
"AMD", "IBM", "USB", "OS/2", "EHCI", "OHCI", "UHCI", "Windows", "Microsoft",
"APPLE", "MAC", "Apple IIe"
are trade marks of their respective owners.
Updates to the USB drivers
NOTE: usbcalls.dll (and usbcalls.sys) is now installed to directory \OS2\DLL (in line with the ArcaNoae package).
Please remove any usbcalls.dll/usbcalls.sym from the \ECS\DLL directory !
NOTE: usbcalls.dll might be in use by the system in which case it cannot be overwritten. You need to unlock the DLL
from memory:
from a command line, switch to directory \os2\dll and issue "unlock usbcalls.dll" before you attempt to overwrite
the file. The "unlock" utility is part of every eCS installation and can be found in the \ecs\bin directory
(or can be found on Hobbes).
Alternatively, if you have EMX installed you can also issue: "emxupd -d usbcalls.dll" which will delete the DLL.
You can then unzip the package which will recreate the DLL.
usbwav.dll might be in use by the system in which case it cannot be overwritten. Follow the instructions given
for usbcalls.dll.
NOTE: rerunning an audio installation can be tricky at times. What you need to do is to FIRST uninstall the existing audio
drivers by unpacking USBAUDIO.ZIP / USBAUD2.ZIP, running "minstall /*" and selecting 0 devices. After a reboot, you rerun the
installation again by running "minstall /*" and this time, by selecting 1 device.
If after an additional reboot you still hear no sound, open the "Multimedia Setup" object and select the USB Audio and Ampmix
drivers as default devices by unselecting and the reselecting that setting. You should now hear sound without the need
of an additional reboot.
You are advised to do a "unlock \mmos2\dll\*" in order to unlock all DLLs in the MMOS2\DLL directory. That will prevent some
problems with DLL that are in use but need to be updated by the multimedia installation.
WARNINGS:
1) use of HPFS386.IFS: if you use HPFS386.IFS, avoid ejecting a stick from the commandline
while the current drive letter/current directory is pointing to the stick you attempt
to eject. Change to some other drive first before you do the eject. Otherwise, you will
experience a trap in HPFS386.IFS.
2) if you want to wipe a large floppy stick with DFSee in order to create partitions under
OS/2, it's a good idea to eject the stick after the wipe and to run a "rediscover prm"
(lvm.exe /rediscoverprm) before you use lvm/minilvm to create partitions and format those.
3) NEVER EVER attempt to load the data segments of USBAUDIF.DLL into high memory. It contains data
that needs to be accessible via 16-bit far pointers. Thunking from 32-bit to 16-bit pointers
is only possible if that data is located in the low (compatibility) memory region.
-----------------------------------------------------------------------------------------------------------------------
changes in 10.251:
USBAUDIO,USBAUD2:
1) fix a bug in "setmem" that would trap these drivers if a length of 0 and a buffer offset
of zero were specified. "setmem" was changed as well as the call locations of this routine
to prevent the trap for these drivers and also for the future
changes in 10.250:
USBMSD:
1) fix a bug introduced in 10.248 so that LVM.EXE will properly open
USBAUD2:
1) fix a bug with streaming data (thanks Wim)
2) fix a bug with setting the sampling frequency, fixes ticket #96 (thanks Wim)
3) fix to keep current WAV playing while stopping earlier paused wav (thanks Wim)
4) fix "GetUSBCharLevel", reduce playback/feedback latency (thanks Wim)
USBAUDIO:
1) minor fix, following change in USBAUD2
2) prepare to fix a bug with setting the sampling frequency (should it become necessary),
following change in USBAUD2
3) fix to keep current WAV playing while stopping earlier paused wav (thanks Wim)
4) fix "GetUSBCharLevel", reduce playback/feedback latency (thanks Wim)
changes in 10.249:
USBD:
1) revert a change done in 10.244: prevent a call for clearing a stalled endpoint if that clear would go against
endpoint zero (default endpoint). The USB spec clearly states that a stalled endpoint zero will clear itself
on the next occasion it is being used (and using endpoint zero in order to clear a stalled endpoint zero could also
potentially lead to an infinite loop ...). An attempt to do otherwise leaves some devices (Logitech Laser Mouse)
completely non-operational
changes in 10.248:
USBUHCD,USBOHCD,USBEHCD:
1) reinstate boot from USB MSD (USB stick tested, USB floppy and CD-ROM untested)
USBD:
1) reinstate boot from USB MSD (USB stick tested, USB floppy and CD-ROM untested)
USBMSD:
1) reinstate boot from USB MSD (USB stick tested, USB floppy and CD-ROM untested)
2) make /MAX_FLOPPY switch work again (USB floppy drives cannot be reliably queried for device geometry)
Note: it is now mandatory that USBD.SYS precedes all other USB related BASEDEV drivers
in config.sys (USB(U|O|E)HCD.SYS,USBMSD.ADD,USBHID.SYS) (same requirement as for the AN provided USB drivers)
Note: booting from USB MSD requires the /I13 switch to be set for USBD.SYS in the config.sys on the boot device (as always)
USBKBD:
1) implement key repetition in SW, there seemingly exist USB keyboards (gaming keyboards ?)
that will accept a SET_IDLE request (the USB equivalent of programming typematic rate/delay)
but not do anything. Now the key repetition is based on a timer/context hook based solution
changes in 10.247:
USBWAV:
1) new IPROCs: adding translating read+seek support for AIFF (uncompressed) and AIFC (uncompressed, alaw, mulaw) files
(format originally invented for MAC and APPLE IIe, comparable to WAV files)
replaces the broken AIFFPROC that is delivered with OS/2
the translation to the standard OS/2 WAV format makes it possible to play AIFF and AIFC files by double
clicking an AIFF/AIFC sound file
changes in 10.246:
USBMSB:
1) revert change from 10.245
USBUHCD,USBOHCD,USBEHCD:
1) revert change from 10.245
USBD:
1) revert change in sequence of HC registration and start of device enumeration
USBAUDIO,USBAUD2:
1) introduce 4 new waveform subtypes: 8kHz/Mono/24-bit, 8kHz/Stereo/24-bit, 8kHz/Mono/23-bit, 8kHz/Stereo/23-bit
changes in 10.245:
USBD:
1) in routines "DeviceFailed" and "SetAddrCompleted", fixed the logic to determine if the
detected USB entity is a root hub, a hub or a (end user) device
USBMSD:
1) changed to register with USBD.SYS already on BASEDEVINIT
USBUHCD,USBOHCD,USBEHCD:
1) changed to register with USBD.SYS already on BASEDEVINIT
USBAUDIO (please note that you will need AN USB stack >= 12.14 in order to use USB3 [XHCI] ports):
1) fixed logic to find the proper feature unit (for volume,bass,treble setting)
2) no longer sets alternate setting to 0
3) enhanced tracing
4) changing volume setting to logarithmic scaling for a more natural volume setting
5) supporting balance (left/right) for those USB audio devices that support volume control for individual channels
6) supporting gain setting (honour feature unit for microphone input)
USBAUD2 (please note that you will need AN USB stack >= 12.14 in order to use USB3 [XHCI] ports):
1) fixed logic to find the proper feature unit (for volume,bass,treble setting)
2) no longer sets alternate setting to 0
3) enhanced tracing
4) fixed setting sampling frequency (interface number was not correctly set, device with audio control bInterfaceNumber > 0 would fail)
5) fixed handling of feedback endpoint (trying to read back > 1 feedback value per transfer is not allowed, this seemed to work for many devices but apparently not for all)
6) changing volume setting to logarithmic scaling for a more natural volume setting
7) supporting balance (left/right) for those USB audio devices that support volume control for individual channels
8) supporting gain setting (honour feature unit for microphone input)
USBAUDIF:
1) supporting gain setting (to support "input" level control of WEPM.EXE, the standard OS/2 audio editor)
changes in 10.244:
USBUHCD,USBOHCD,USBEHCD:
1) again, fix all HD drivers to chain in "isoInfo" structure into global linked list BEFORE adding the iso TDs to
the schedule, see 10.242
changes in 10.243:
USBUHCD,USBOHCD,USBEHCD:
1) fix regression error introduced in 10.242 (OHCI and UHCI rely on former sequence) but keep Mutex protection
for properly setting TD parameters and chaining in "isoInfo" structure
USBUHCD,USBOHCD:
2) add some iso bandwidth tracing
3) slightly update packet transmission time computation (PacketTTime)
changes in 10.242:
USBUHCD,USBOHCD,USBEHCD:
1) in "OpenIsoReq"", chain in "isoInfo" structure into global linked list BEFORE adding the iso TDs to the
schedule in order to avoid traps when the USB HW suddendy starts operation
USBRESMG:
1) work around a VirtualBox specific problem: when USB 1.x emulation is used, VirtualBox will erroneously
present the controller to be USB 2.x if the real HW is USB 2.x. That in turn will lead to "pIoRB" to become
NULL after a call to "ClearStalled" in routine "DataRW". Now, pIoRB->pDevice pointer is saved into a local
variable and subsequently "pDevice" pointer used after call to "ClearStalled"
changes in 10.241:
USBUHCD,USBOHCD,USBEHCD:
1) fix "cancel" handling for ischronous devices: unfortunately, iso transfers can be cancelled by 2 different means:
calling USB_IDC_FUNCTION_CANCEL idc call or by USB_IDC_FUNCTION_ACCIO/isoFlags=USRB_ISOFLAGS_CANCEL.
Change cancel processing to gracefully handle the condition that cancelling is done by either or both different ways.
USBRESMG:
1) protect "CancelRequests" from being called with an NULL pDevice pointer
USBCOM:
1) fix handling of handling stalled pipe
2) update tracing
changes in 10.240:
USBUHCD,USBOHCD,USBEHCD:
1) simplify and speed up routine "CreateTDList": this routine is called hundreds and hundreds of times, it is therefore time critical
USBOHCD:
1) minimize the number of TDs used for a transfer, this will prevent TD depletion when larger transfers/ a lot of transfers are scheduled
(example: I have a builtin webcam sending MPEG packets of size 3060 bytes via a bulk endpoint of wMaxPacketSize = 64 bytes:
it now needs one TD to transfer this data, before, it needed 3060 / 64 = 48 TDs to transfer this data)
USBRESMG:
1) change error return code from "ProcessIoRB" routine to cover the case a transfer is not scheduled at all and therefore no transmission
result is available
2) add a check to "ClearStalled" (the data pipe of a device is to be cleared) for valid pDeviceInfo pointer:
avoids a trap if a device is detached while this routine is being called, there might be more fixes like these in the future
changes in 10.239:
USBAUDIO,USBAUD2:
1) support rate/num channels/bps conversion for recording to the same extent as for playback. That will finally allow old audio applications like WEPM.EXE to generate
a proper WAV file in case the USB HW does not support the outlived sample rates that OS/2 applications typically provide (thanks Wim Brul)
USBAUDIO:
1) fix some trace codes (they incorrectly referred to USBAUD2.SYS) (thanks Wim Brul)
USBUHCD,USBOHD,USBEHCD:
1) back out changes done in 10.238 regarding mapping of virtual addresses for isochronous transfers. Apps pass virtual addresses that are only valid in process context.
These still need to be mapped to GDT addresses.
USBRESMG:
1) remove double buffering in case (long term) locking of user buffers fail. The double buffering code was broken anyways and it turns out that locking of user buffers
always succeeds.
2) add a safety check for device references in case the device has been removed or the IoRB reused for another device in order to avoid a trap if that happens.
3) add safety checks for input parameters for "SendIsoURB"
4) entirely remove clearing a stalled default pipe, a default pipe will automatically clear itself on the next control transfer and the attempt to clear a default pipe
can itself lead to a situation where the clear will never finish
changes in 10.238:
USBAUDIO,USBAUD2:
1) fix drivers so that "record-only" devices can now be used with all multimedia applications that allow recording (thanks Martin Iturbide for extensive testing)
2) remove handover from one USB audio device, if active USB audio device is removed, we now immediately stop the streaming (thanks Martin Iturbide for extensive testing)
(thanks Wim Brul for fixing a regression I accidentally introduced when porting USBAUDIO changes to USBAUD2)
3) fixed query of feature unit for volume control, in the past, it did not work properly for every device
4) fix various quirks when changing from record to playback stream if recording and playback are performed by different USB audio devices
(for example, using WEPM.EXE for recording and subsequent playback)
5) on device detach, fix handover of active playback / record device index to another device (if another USB audio device is plugged in)
USBAUDIF.DLL
1) fix this VSD (vendor specific driver) so that "record-only" devices can now be used with all multimedia applications that allow recording,
fix numerous oddities and quirks and general cleanup of this component
USBUHCD,USBOHCD,USBEHCD:
1) management of memory buffers used during isochronous transfers: remove mapping of physical addresses to GDT virtual addresses where that is not necessary
(where virtual addresses are passed in by client drivers instead of physical addresses)
USBOHCD:
1) "isoInfo" structure was prematurely freed from ctx hook handler, which lead to failure on "CancelIsoReq" and "CloseIsoReq". Now, only "CloseIsoReq" will free
the structure, analogous to what is done in USBEHCD and USBUHCD
USBWAV:
1) updated "listprocs.exe" tool to "guess" sample rate/number of channels/bits per sample for all data subtypes of data type DATATYPE_WAVEFORM (PCM) so that
the user can associate a data subtype with these 3 vital stream parameters
changes in 10.237:
USBAUD2:
1) see 10.235 2), for usb audio 2 it seems to be necessary to do the opposite, say, first set sampling freq. and then set alternate interface (thanks Wim Brul)
2) add a hack to enable DSD on the Amanero Combo384 USB audio 2.0 device: this device has a non-standard, proprietary way to use the DSD format
(aka: it follows no standard) (thanks Wim Brul)
changes in 10.236:
KEE16LIB:
updated lib to make it Watcom compatible
changes in 10.235:
USBAUDIO:
1) add support for control interface status interrupt pipe including proper handling of interrupt pipe stall. On a notification,
the driver will query the info as mandated by the spec but it will not do anything with the returned info. This is a precautionary
measure for those devices that offer this optional pipe (maybe it is necessary to serve the pipe)
2) fix sequence of setting alternate interface and endpoint characteristics: for some devices it seems to be essential to FIRST set the
alternate interface and THEN to set the endpoint characteristics (sampling freq.) in order to avoid a "hiss" sound or other sound distortion
(thanks to Sean Casey for reporting the problem and having the patience to test the provided fixes)
3) fix "usCurrentFrame" to wrap around at 1000. This is necessary so that routine "GetCurrentFrame" size will always compute the proper frame
size in case it varies over time (for a sampling freq of 44100 Hz, for example: whenever the sampling freq does not evenly divide by 1000)
USBAUD2:
1) equivalent to USBAUDIO 1)
2) equivalent to USBAUDIO 2)
Note: there is no USBAUD2 equivalent for USBAUDIO 3), audio 2.0 devices have a different mechanism to determine the necessary frame size
changes in 10.234:
USBAUDIO, USBAUD2:
1) USBAUDIO,USBAUD2: prevent these drivers from trapping if a sampling rate of 0 is passed to "Audio_IOCTL_Capability".
This will happen if a MIDI file is selected and either USB driver is marked as the default ampmix device.
changes in 10.233:
USBPRT:
1) remove spinlock protection around calls to the semaphore devhelps. Because the semaphore devhelps reenable interrupts
this can lead to a hang (spinlocks require interrupts to be disabled until they are released)
USBMSD:
1) dito
changes in 10.232:
USBAUDIO,USBAUD2: fix volume/treble/bass control to prevent stuttering on using controls (thanks Wim Brul)
PLEASE RERUN THE USBAUDIO (usbaudio.zip) and USBWAV INSTALLATION (usbwav.zip). Don't forget to reset the default
audio device if necessary (use Multimedia Setup applet)
changes in 10.231:
USBCALLS:
1) place notification table in shared segment and fix the DLL init code to properly initialize shared mutex
to protect this shared resource. Necessary to protect multiple applications making simultaneous use of USBCALLS
changes in 10.230:
USBRESMG:
1) for the SET_CONFIGURATION request, do not do anything but return indicating success. It is a really bad idea
to change the configuration during runtime. It should only be set once on device enumeration (which USBD.SYS does).
Note that there are very few devices (if any) that have multiple, different configurations.
2) fix toggle bit handling on clearing a stalled endpoint (for either a dedicated CLEAR_FEATURE request against a given endpoint
to clear a stalled endpoint or after a data transfer that led to a stalled endpoint)
3) on stall of default pipe when a standard request has been issued, clear the default pipe by doing a standard request
that we know is going to succeed (in our case, use GET_STATUS for first interface). That will clear the default pipe
and is the ONLY WAY to clear a stalled default pipe (running a successful request).
Need to do this so that a stalled standard request issued by USBRESMG.SYS will not interfere (hang)
with operation of other class drivers accessing the same device (USBMSD.ADD etc.)
USBCALLS:
1) fixes so that USB[Device|Interface|Endpoint]GetStatus will no longer hang the system if they address unknown interfaces
or endpoints
UHCI,OHCI,EHCI:
1) remove the restriction that the HC drivers can only queue one control transfer at a time. That should reduce device dropout
in case multiple drivers (for example, USBRESMG.SYS and USBMSD.ADD) concurrently access the same device
changes in 10.229:
UHCI,OHCI,EHCI:
1) remove config.sys ordering dependency with USBD.SYS
USBD:
1) remove config.sys ordering dependency with USB?HCD.SYS, make /I13 switch work for any possible config.sys ordering
2) adding some more tracing
USBMSD:
1) remove config.sys ordering dependency with USBD.SYS, make USBMSD.ADD work for /I13 switch set for USBD.SYS or not
2) adding some more tracing
*** Note ***: these combined changes should make this USB driver set compatible with the new config.sys ordering introduced
by ArcaOS 5.0.4 where USBD.SYS precedes the USB?HCD.SYS drivers !
In fact, it is now completely irrelevant if USBD.SYS loads before the USB?HCD.SYS or after them,it will work either way.
(thanks Dave Graser for reporting and testing the changes)
USBAUDIO,USBAUD2 (thanks Wim Brul):
1) favor resampling with smallest integer ratios (in case requested sampling freq does not match available ones)
EHCI (thanks Wim Brul):
1) for isochronous tranfer, arm context hook to add new iso buffers to schedule also from iso irq processing context hook
in order to avoid data starvation
changes in 10.228:
USBAUDIO,USBAUD2 (thanks Wim Brul):
1) support for recording with input sample rates 44.1 kHz, 48 kHz, 64 kHz, 88.2 kHz, 96 kHz, 176 kHz, 192 kHz, 352.8 kHz, 384 kHz
2) minor fixes to allocated frame buffer sizes for recording
3) for recording, picking sample rate that the HW supports that is closest to the requested rate
USBWAV:
1) removing bit depth conversion from 24bit/32bit to 16bit: this, along with channel duplication and sample rate conversion is
completely implemented in USBAUDIO and USBAUD2
2) for format conversion, use the OS/2 supplied filter DLLs instead of CODECS: now USBWAV will convert MULAW,ALAW,Microsoft ADPCM,IMA ADPCM
to linear PCM via the OS/2 supplied DLLs mulawflt.dll,alawflt.dll,msfilt.dll,imafilt.dll
(info: the supported/installed filters are listed in \MMOS2\MMPMCONN.INI)
Note: the installation still contains mulaw and alaw codecs in case anyone will ever want to use that (use of codecs instead of filters
was the approach targeted by OS/2 but apparently never completely finished)
3) update listprocs.exe to also list the installed filters
PLEASE RERUN THE USBWAV INSTALLATION (usbwav.zip)
changes in 10.227:
USBD:
1) revert a change done in 10.226 regarding reset timing (thanks Eugene Tucker)
2) make USBD continue to enumerate devices if an error occurs on handling device status
3) fixes to handling non-hub/hub/root hub device errors
4) fixed 2 longstanding bugs: on device attach, do cancel all endpoint traffic (revert 10.226 USBD 2)) and
also on initial hub initialization, always enforce enumeration of ALL ports of that hub (thanks Wilfried Eike)
USBUHCD,USBOHCD,USBEHCD:
1) minor fixes to root hub descriptor. Always specify a small power on delay for root hubs.
For OHCD and EHCD, these will then be reset individually (EHCI and OHCI specs define how to query these delays)
USBAUDIO,USBAUD2:
1) add a new applet to set the default WAVE and AMPMIX devices (in case you have more than one audio device).
This applet hooks itself into the "Multimedia Setup" notebook. This applet was written as apparently
so many people have problems to get audio to work and often this is due to the fact that the default WAVE
and AMPMIX devices are not correctly set.
PLEASE RERUN THE USBAUDIO INSTALLATION (usbaudio.zip)
changes in 10.226:
USBAUDIO,USBAUD2:
1) added (playback) support for 16-bit mono/stereo at 12/15/24 kHz sampling rates.
PLEASE RERUN THE USBAUDIO INSTALLATION (usbaudio.zip)
USBMSD:
1) in OS/2 HW Manager, add a RM device node for each attached MSD under the "USB Mass Storage Device Class driver"
The strings displayed (vendor,product,product rev) are directly taken from the "SCSI Inquiry" command
These are the very same strings that DFSee >= version 15.5. will display for USB sticks/disks
USBHID:
1) remove /S switch (/S: show HID devices names (for mice and keyboards) in OS/2 HW manager),
/S switch behaviour is now the default
USBRESMG:
1) fix a bug when clearing a stalled pipe (direction flag for endpoint was not properly set),
wait for stalled pipe command to finish (before accepting next command)
2) some sanity check for control transfers added (for the rare case of control transfers that do NOT go via endpoint zero)
USBD:
1) on clearing a stalled pipe, do not attempt to call class/client driver notification routine
if it is not specified
2) on attaching a new device, do not call "cancel endpoint" processing against the default address
for the HC serving the device, this is unnecessary and would just kill all current transfers
of all other devices attached to the same HC (due to a bug in the HC drivers which has also been fixed,
see below)
3) change reset timing
UHCI,OHCI,EHCI:
1) rework endpoint cancel processing. This will fix errors where on a new device insert, any interrupt device (mouse,keyboard)
or isochronous device (USB audio) would cease to work
OHCI:
1) additional fixes for endpoint cancel processing with regard to isochronous devices: fix a memory leak
changes in 10.225:
USBAUD2:
1) adding USB audio 2.0 support. The USB audio 1.0 and USB audio 2.0 standards are different enough to justify adding a separate
driver for audio 2.0 support (USBAUD2). The driver for audio 1.0 support (USBAUDIO) can still be used along with USBAUD2.
All recent USB devices (let's say newer than > 2016) are likely following the audio 2.0 standard.
The USBAUD2 supports the very same sample rates and bit resolutions as the USBAUDIO driver does.
In addition it supports DSD (via DART) with these sample rates: 44.1,48,88.2,96,176.4,192,352.8,384,705.6,768 kHz. (thanks Wim Brul !)
Here is the detailed info that Wim provides:
Capabilities of the USB audio 2.0 driver.
Supports playback only. Recording not supported.
Plays 8/16-bit mono/stereo legacy sample rates (8 kHz, 11.025 kHz, 22.050 kHz).
Plays 16/24/32-bit mono/stereo standard sample rates (32 kHz, 44.1 kHz, 48 kHz,
64 kHz, 88.2 kHz, 96 kHz, 176 kHz, 192 kHz, 352.8 kHz, 384 kHz). If a bit
resolution / sample rate is not directly supported by the hardware then
conversion will take place according to the following table:
+-------------------------------------------------------------------------+
| sampling rates 16/24/32-bit mono/stereo to 16/24/32-bit stereo |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+
| 32.0 | 44.1 | 48.0 | 64.0 | 88.2 | 96.0 | 176.4 | 192.0 | 352.8 | 384.0 | kHz |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+---+
| ok | down | down | down | down | down | down | down | down | down | 32.0 | |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | ok | down | down | down | down | down | down | down | down | 44.1 | H |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | ok | down | down | down | down | down | down | down | 48.0 | A |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | up | ok | down | down | down | down | down | down | 64.0 | R |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | up | up | ok | down | down | down | down | down | 88.2 | D |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | up | up | up | ok | down | down | down | down | 96.0 | W |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | up | up | up | up | ok | down | down | down | 176.4 | A |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | up | up | up | up | up | ok | down | down | 192.0 | R |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | up | up | up | up | up | up | ok | down | 352.8 | E |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | up | up | up | up | up | up | up | up | ok | 384.0 | |
+------+------+------+------+------+------+-------+-------+-------+-------+-------+---+
a) 16-bit to 24/32-bit and 24-bit to 32-bit is done by zero extension.
b) 32-bit to 24/16-bit and 24-bit to 16-bit is done by truncation.
c) mono is converted to stereo by sample duplication.
d) downsampling is done by throwing away samples.
e) upsampling is done by duplicating samples.
Playback of DoP (DSD over PCM) is possible when your hardware supports it.
CAUTION: Inherent to DSD this requires bit perfect playback and muting and
not using maximum volume will result into harmfull noise/static.
Playback of raw DSD stereo (DSD32, DSD64, DSD128, DSD256, DSD512) is only
possible through the DART interface and when your hardware supports it.
CAUTION: Inherent to DSD this requires bit perfect playback and muting and
not using maximum volume will result into harmfull noise/static.
USBAUDIO:
1) fix error in subtype protocol table: incorrectly specified sample frequency of 352000 Hz, needs to be 352800 Hz. This is already
correct in USBAUD2.
USBMSD:
1) fixing an error when virtual (in memory) Track 0 of a "large floppy" media is accessed:
the driver only ever reads/writes 1 sector in this case,
and therefore should only report back handling 1 sector (no matter how many were requested)
2) minor changes in locking segments. No functional impact.
USBKBD:
1) fix support for media/system keys on a USB keyboard. Changes to additional drivers (AMOUSE.SYS, IBMKBD.SYS, KBDBASE.SYS)
might be necessary to see and use these additional keys in applications. However, you can use XWorkplace to add scancodes
for these additional keys via the "function keys" page of the Keyboard object and use these additional keys as keyboard shortcuts
to open objects (as described in the XWorkplace help)
2) fix keyboard repeat (hopefully, please report if it still does not work ...).
3) fix handling of toggle flag
4) update/add tracing (major code:228 = 0xE4).
USBMOUSE:
1) analogous to USBKBD 3), fix handling of toggle flag
2) update/add tracing (major code:228 = 0xE4).
USBHID:
1) minor changes in locking segments. No functional impact.
2) update/add tracing (major code:228 = 0xE4).
USBEHCD:
1) isochronous data transfer: fixed a bug in "AccIsoBuffer" when arming the context hook to start isochronous processing.
The bug lead to overwriting the device driver's header which in turn would break the device driver chain.
USBCALLS:
1) properly close notification mutex on DLL termination
changes in 10.224:
USBD:
1) make USBD.SYS compatible with OS/4 kernel (to properly display HUB info in OS/2 Hardware Manager), USBD.SYS will still
properly load on the standard OS/2 kernel
2) fixes so that USB will work from a booted up commandline
3) back out Transaction Translater (TT) reset introduced in 10.223. Looks like some hubs don't like this command if issued
directly after hub ports power on (thanks Barry Landy)
4) change all delay timing in the root hub processing in the HC drivers ((U|O|E)HCD.SYS) from using blocking to using delay timers.
This should reduce device attach problems on bootup. The complete solution would also involve doing the same for USBD.SYS
but that has not been done due to lack of time.
changes in 10.223:
EHCI:
1) fixed errors in bandwidth deallocation computation. The effect of the bug was that extended use of mouse/keyboard
attached to USB 2.0 hub would increasingly slow down the system and finally make mouse/keyboard non-operational
2) properly serialize allocation and deallocation of TDs (transfer descriptors). Looks like after an extended time span
of using mouse/keyboard attached to USB 2.0, the system is running out of free TDs which eventually leads to a system
freeze
USBPRT:
1) limit the number of USB printers to 4 (and 2 COM port connected printers). It used to be 32 printers (and 16 COM port connected printers)
and on driver init, 2 GDT selectors per printer are allocated. GDT selectors are a scarce resource and each GDT selector allocation
reduces free memory space in the system arena.
USBD:
1) add Transaction Translator (TT) reset for all hubs on initial hub enumeration to get hubs into a consistent state after system start.
This is essential for USB 1.x devices attached to a USB 2.0 hub.
2) call HC resets and enumeration of root hubs for all HCs on multiple invocations of the context hook dedicated for this job.
That will (hopefully) prevent the system from hanging because HC reset will take an extended period of time
3) revert change 2) of version 10.221
changes in 10.222:
USBD:
1) change HC reset and root hub enumeration logic:
first, reset all EHCI HCs, then reset all UHCI/OHCI HCs, then start root hub enumeration for all
EHCI root hubs, then start root hub enumeration for all UHCI/OHCI root hubs
USBWAV:
1) remove sample rate conversion, instead, add conversion from 24-bit/32-bit to 16-bit
so that you can replay 24-bit/23-bit files to a 16-bit audio device via MMPM (double click on sound file, ...)
It also adds a subpage to the Multimedia Setup Object (under "USB Adapter Wave") to disable/enable that feature
for example if you do have a USB audio device that is natively capable of playing 24-bit or even 32-bit.
Can be used along with the conversion USBAUDIO provides (see below). USBWAV continues to support A-law and u-law
codecs. PLEASE RERUN THE USBWAV INSTALLATION
EHCI:
1) fix interrupt transfer driven devices (mouse,keyboard) by fixing bandwidth allocation and deallocation computation.
That'll allow to properly use mice and keyboards on USB 2.0 hubs, in particular if isochronous devices
(USB audio stick) are used on the very same hub (thanks Mikhail Zlobin for reporting this problem)
USBAUDIO:
1) adding additional conversion for sample rates and/or bit resolutions (thanks Wim Brul)
Wim has provided this complete list of what conversion is provided apart from the legacy sample rates
(8 kHz, 11.025 kHz, 22.050 kHz) that continue to be supported.
PLEASE RERUN THE USBAUDIO INSTALLATION.
In general, if a bit resolution / sample rate is directly supported by the Hardware then no conversion
will take place:
+-----------------------------------------------------------+
| sampling rates 32-bit mono/stereo to 16/24/32-bit stereo |
+------+------+------+------+-------+-------+-------+-------+-------+
| 44.1 | 48.0 | 88.2 | 96.0 | 176.4 | 192.0 | 352.8 | 384.0 | kHz |
+------+------+------+------+-------+-------+-------+-------+-------+---+
| ok | down | down | down | down | down | down | down | 44.1 | H |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | ok | down | down | down | down | down | down | 48.0 | A |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | ok | down | down | down | down | down | 88.2 | R |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | ok | down | down | down | down | 96.0 | D |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | ok | down | down | down | 176.4 | W |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | ok | down | down | 192.0 | A |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | | ok | down | 352.8 | R |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | | | ok | 384.0 | E |
+------+------+------+------+-------+-------+-------+-------+-------+---+
1) 32-bit is converted to 16/24-bit by truncation.
2) mono is converted to stereo by sample duplication.
3) downsampling is done by throwing away samples.
+-----------------------------------------------------------+
| sampling rates 24-bit mono/stereo to 16/24-bit stereo |
+------+------+------+------+-------+-------+-------+-------+-------+
| 44.1 | 48.0 | 88.2 | 96.0 | 176.4 | 192.0 | 352.8 | 384.0 | kHz |
+------+------+------+------+-------+-------+-------+-------+-------+---+
| ok | down | down | down | down | down | down | down | 44.1 | H |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | ok | down | down | down | down | down | down | 48.0 | A |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | ok | down | down | down | down | down | 88.2 | R |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | ok | down | down | down | down | 96.0 | D |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | ok | down | down | down | 176.4 | W |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | ok | down | down | 192.0 | A |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | | ok | down | 352.8 | R |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | | | ok | 384.0 | E |
+------+------+------+------+-------+-------+-------+-------+-------+---+
1) 24-bit is converted to 16-bit by truncation.
2) mono is converted to stereo by sample duplication.
3) downsampling is done by throwing away samples.
+-----------------------------------------------------------+
| sampling rates 16-bit mono/stereo to 16/24-bit stereo |
+------+------+------+------+-------+-------+-------+-------+-------+
| 44.1 | 48.0 | 88.2 | 96.0 | 176.4 | 192.0 | 352.8 | 384.0 | kHz |
+------+------+------+------+-------+-------+-------+-------+-------+---+
| ok | down | down | down | down | down | down | down | 44.1 | H |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| up | ok | down | down | down | down | down | down | 48.0 | A |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | ok | down | down | down | down | down | 88.2 | R |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | ok | down | down | down | down | 96.0 | D |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | ok | down | down | down | 176.4 | W |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | ok | down | down | 192.0 | A |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | | ok | down | 352.8 | R |
+------+------+------+------+-------+-------+-------+-------+-------+ |
| | | | | | | | ok | 384.0 | E |
+------+------+------+------+-------+-------+-------+-------+-------+---+
1) 16-bit is converted to 24-bit by zero extension.
2) mono is converted to stereo by sample duplication.
3) downsampling is done by throwing away samples.
4) upsampling is done by duplicating samples.
changes in 10.221:
USBD:
1) back out changes done in 10.218. It is not necessary
2) when a hub (root hub or external hub) is attached, always do a "GetPortStatus" for all ports
of that hub. That will fix the error that attaching an external hub without any devices attached
will prevent attachment of devices attached to root hubs. It might also fix other attach problems
for devices already attached on bootup
USBAUDIO:
1) completely updated installation to support media with sampling rates > 48000 Hz.
Now, 64000/88200/96000/176400/192000/352800/384000 Hz are supported for 16-bit/24-bit/32-bit
bit resolution, provided that the device supports it (of course)
PLEASE RERUN THE USBAUDIO INSTALLATION. See note above about pitfalls on running an audio installation.
The installation will properly update MMPM2.INI and also SPI.INI and will install a new file "USBAUDIF.DLL" which
replaces/supplements the original "AUDIOIF.DLL" file.
changes in 10.220:
USBUHCD,USBOHCD,USBEHCD: back out changes done in 10.219
USBMSD:
1) for CD-ROMs, for devices without media and on failed attach, free the virtualization sectors
reserved already on device attach
2) minor fix to clear direction flag in "GetCmdBlkValue"
USBAUDIO:
1) add support for 24-bit devices: the driver will now also automatically convert from
8-bit/16-bit mono/stereo to 24-bit stereo if necessary. It will also upsample the source
sample rate to the required device (target) sample rate (thanks Wim Brul)
2) fix the search algorithm to find the correct feature unit descriptor for control of
volume/mute/treble/bass
3) fix computation of stream play times, in particular if one stream is started and then
interrupted by starting another stream
USBWAV:
1) fix a trap when a WAV file contains bogus header values for usBlockAlign and/or usAvgBytesPerSecond (thanks Wim Brul)
2) fix errors in MMX code on converting/upsampling stereo input (mono input was converting/upsampling ok already)
changes in 10.219:
USBCOM:
1) serialize all control transfers (only issue the next control transfer if the previous one has
finished with a notification being sent to USBCOM)
USBD:
1) move calling of class/client drivers for service to "ListenStatusChangedPipe": fixes hangs
where class/client drivers issue a lot of control transfer commands to set up the device
2) fix a trap condition in "ExtConfSet" routine: for "USBSetConfiguration" and "USBSetInterface" requests,
NEVER attempt to clear a stalled pipe (if indicated).
Instead just call the originating class/client driver and have that handle the stall condition.
Note: In these cases, the stalled pipe is owned/managed by the class/client drivers
and NOT by USBD.SYS.
USBUHCD,USBOHCD,USBEHCD:
1) completely remove the timeout processing for control transfers against the default address:
this functionality is completely useless
USBOHCD:
1) only reset HC, do not reset the complete USB bus (in line with what USBUHCD and USBEHCD do)
USBAUDIO:
1) some changes to work around ICAT oddities on debugging
USBWAV:
1) only cosmetic change, no functional change (remove unused function argument from internal function)
USBKBD:
1) prevent devices from attaching that have a HID interface but that are not keyboards
changes in 10.218:
USBAUDIO:
1) fix stuttering sound when playing again after a rewind (thanks Win Brul)
USBD:
1) prevent USBD.SYS from offering a device for service to the calling client/class drivers
while a status notification stalled pipe clear is in progress on the hub the device is attached to
This is to prevent a possible conflict when multiple devices are already attached to an external hub when
the hub is powered on
changes in 10.217:
USBD:
1) fixed a trap in a routine that displays calling client device driver names (in the trace).
For some yet unknown reason sometimes the DS value of a calling client device driver is not set.
In that case, the routine now does nothing in order to avoid a trap on copying the driver name.
USBMOUSE,USBKBD:
1) properly set DS and also IDC entry point on a "ClearStalledPipe" call, is related to the fix in USBD
USBAUDIO:
1) properly set DS and also IDC entry point on a "ClearStalledPipe" call, is related to the fix in USBD
2) fix a potential trap condition when the driver reports to stream manager that a buffer has been processed
3) compute the clock time time interval from the global info seg value instead of hard coding it
4) fixing a bug where the buffer size to play was accidentally overwritten by the length value of the next buffer
(thanks Wim Brul)
5) added on-the-fly conversion support (see USBWAV, point 1)) if applications use DART directly and therefore bypass
the MMIO file (IOProc) support, this support includes sample rate conversion from/to arbitrary sample rates (thanks Wim Brul)
Note: an example of direct DART use is the "libkai" library (used by Firefox, for example)
USBEHCD:
1) enabling a code path in USBEHCD.SYS so that we have enough frame allocations available to upsample
a 8000 Hz, mono file to 48000 Hz stereo (thanks Wim Brul)
USBWAV:
1) I now added an on-the-fly sample rate conversion IOProcedure as support for USBAUDIO.SYS that is to do the following
sample rate conversion:
target:
16-bit signed PCM, stereo, 44100 Hz
source:
8-bit unsigned PCM, mono, 11025 Hz
8-bit unsigned PCM, stereo, 11025 Hz
8-bit unsigned PCM, mono, 22050 Hz
8-bit unsigned PCM, stereo, 22050 Hz
8-bit unsigned PCM, mono, 44100 Hz
8-bit unsigned PCM, stereo, 44100 Hz (no duplication but still 8-bit to 16-bit conversion)
16-bit signed PCM, mono, 11025 Hz
16-bit signed PCM, stereo, 11025 Hz
16-bit signed PCM, mono, 22050 Hz
16-bit signed PCM, stereo, 22050 Hz
16-bit signed PCM, mono, 44100 Hz
The "sample rate conversion" is currently limited to just duplicating samples (plus the 8-bit unsigned to 16-bit signed conversion where necessary).
Don't expect sound "miracles" but you can now finally properly play the WAV sound files in the \MMOS2\SOUNDS folder in the correct speed.
This IOProcedure can only work if your USB audio device supports 16-bit signed PCM, stereo, 44100 Hz (that is: Audio CD default).
See also FAQ.
2) additionally I have added Codecs for A-Law and Mu-Law
3) for audio compressed files, I have added support to the IOProc to use any audio codecs that are installed to decompress audio
from the compressed format to 16-bit PCM (if a suitable codec can be found)
USBCOM:
1) increase the maximum wait time for each PROLIFIC (vendor) specific setup command from 100ms to 1000ms. Seems
that some devices are too dog slow to finish these commands in 100 ms. On the long run, the correct implementation
is to implement each command via asynchronous notification instead of blocking.
USBETHR, USBHID, USBAUDIO, USBCOM, USBKBD, USBMOUSE, USBMSD, USBPRT, USBRESMGR:
1) changes so that all USB_IDC_FUNCTION_ACCIO, USB_IDC_FUNCTION_SETCONF, USB_IDC_FUNCTION_CLRSTALL commands
will properly transmit the callers DS and IDC entry point:
USB_IDC_FUNCTION_ACCIO, USB_IDC_FUNCTION_SETCONF: if USBD tracing is enabled, that will allow USBD to print out
the driver name of the caller calling into USBD
USB_IDC_FUNCTION_CLRSTALL: that will allow USBD (via the USBUHCD/USBOHCD/USBEHCD drivers) to properly address
the calling driver to return to once the stalling condition is reset at the device
changes in 10.216:
USBUHCD,USBOHCD,USBEHCD:
1) add proper serialization for iso buffers (isochronous data transfers: USB audio, USB video) to prevent
traps on concurrent access from user context and context hook context (thanks Neil Waldhauer)
2) add a safety check to prevent accessing past the end of the iso frame buffer list
3) add a safety check to prevent accessing past the end of the frame length list
USBAUDIO:
1) add a fix to properly compute frame size for sample rates that are not a multiple of 1000 Hz (thanks Wim Brul)
2) add a fix to NOT increase processed frame counter when at end of buffer there is no data to fill
a whole frame and that remaining data needs to be "moved over" to the next frame (thanks Wim Brul)
changes in 10.215:
USBMSD:
1) fixed incorrect geometry computation for FAT-16 formatted large floppy sticks,
FAT-32 formatted large floppy sticks are not a problem.
In particular, pick up geometry values from the BPB if the stick is already formatted
If it is blank then set NumHeads = 1,SectorsPerTrack = 1 and NumCylinders = NumTotalSectors
if NumTotalSectors <= 4084*8 ("< 4084*8" sectors is the FAT12 sector limit)
which is what Windows 10 does with such small media, else use NumHeads = 255 and
SectorsPerTrack = 63/127/255 (depending on disk size)
(thanks Doug Bissett)
2) fixed incorrect geometry computation for partitioned sticks if the first partition
does not start within the first cylinder
(thanks Hanno Sedlmayr)
3) if for partitioned media NumTotalSectors evenly divides by (64*32)
then choose NumHeads = 64 and SectorsPerTrack = 32
as these are the values that Windows chooses for SSD/4k sector type devices
This is supposed to avoid conflicts with DFSee which also assumes these geometry values
for SSD/4k sector type devices
4) fixed and simplified treatment of driver internal "REQUEST_SENSE" requests
5) fixed a problem where on a "READ_CAPACITY" command during device attach
the stick would answer with error "NOT READY TO READY TRANSITION - MEDIA CHANGED"
and would deliver no valid capacity data and garbage data on a subsequent READ10 request
preventing the computation of a valid geometry.
Now, under these circumstances, the "READ_CAPACITY" command will be repeated
until the stick no longer signals an error.
(thanks Hanno Sedlmayr)
6) removed a couple of unnecessary commands issued on device attach (introduced with 10.211)
in order to speed up the attach process.
Please be aware that now device attach can still take longer than before if devices take
a long time to become ready (see preceding point).
This could cause problems with the AN Removable Media Monitor widget running into a timeout and
reporting the device did not attach where in fact it will eventually attach.
In this case, just run "Refresh removable media" to refresh the removable media state.
The standard USB monitor daemon program (USBMSDD.EXE) does not exhibit this problem,
it will correctly report device attach the moment when the device becomes ready for use
7) reduce max value for /BUFFER: from 32768 to 20480 bytes (when USB 1.x devices are in use)
(thanks Doug Bisset)
8) for all REMOVABLES (not floppy, not CD-ROM): when "RediscoverPRM" is run, this will lead to a
request to USBMSD.ADD to read capacity. When that happens, chain in a command to read sector 0
so that we can recompute the geometry (we need BPB / MBR in addition to overall capacity
to come up with a geometry).
This is particularly critical for devices with removable media like card readers where the device
stays attached but the media changes.
Floppies and CD-ROMs are handled differently and never suffer from this problem.
(thanks Doug Bisset for his unintentional mentioning of this problem :-)
changes in 10.214:
USBMSD:
1) another change in geometry computation in order to prevent that DLAT Sector added via DFSee
will overwrite FAT/data area, if "SectorsPerTrack" value is determined to be 32 then "NumberOfHeads"
will be set to 64 (common settings for Windows prepared USB sticks).
If "SectorsPerTrack" is <> 32 then "NumberOfHeads" will be set to 255 (which is the OS/2 default)
USBOHCD,USBEHCD,USBD,USBCOM,USBAUDIO:
1) avoid use of VMDHA_USEHIGHMEM flag for dynamic memory allocation via DevHelp_VMAlloc. This
flag was originally added to reduce memory allocated below the 16 MB physical address line
by device drivers on bootup. This however seems to conflict with the use of CHKDSK.SYS.
In any case, this flag is unnecessary if EARLYMEMINIT=TRUE is used in config.sys
(which is the typical setting these days)
changes in 10.213:
USBMSD:
1) again reworking geometry computation, simplify code
2) adding EXFAT support for large floppy formatted media:
this is done in anticipation that someone will write an EXFAT IFS for OS/2
large floppy EXFAT formatted media will then be virtualized as partitioned media
in the same way as it is done already for FAT32 large floppy formatted media
3) reworking device detach
4) compute a GUID for virtualized floppies that only depends on device characteristics
and that will therefore be identical on each device insertion of a particular device:
this was done to prevent a trap 3 in OS2LVM where OS2LVM will try to rediscover
a partition via its unique partition serial number which can lead to problems if a device is
just ripped out without being properly ejected first.
The so computed GUID will now be used as the disk/volume/partition unique serial number
changes in 10.212:
USBMSD:
1) fix a bug in geometry computation that would lead to a division by zero trap
on ejecting a device, leaving the device inserted and then doing a "rediscover prm"
changes in 10.211:
USBD:
1) increase power-on delay on hub attach
USBPRT:
1) attempt to fix the problem of non-connecting printers
(USB port driver shows the printer as not connected even though it is and USBD.SYS correctly reports it as attached)
USBUHCD,USBOHCD,USBEHCD:
1) protect all write to PCI config space registers by disabling interrupts
USBMSD:
1) add additional tracing
2) change the command sequence for device attach to what Windows does when new device is attached
That will hopefully increase the likeliness that a MSD device will attach successfully
3) add additional delays to commands issued on device attach, there are devices that need some delay in between
commands
4) change geometry computation to match what DFSee expects, in particular, compute a (preferred)
device geometry (base for formatting) and a possibly different current media geometry (read from the current media)
changes in 10.210:
USBD:
1) add additional tracing for central transmission function (USBAcceptIO)
USBUHCD:
1) back out change in 10.209 point 1)
USBMSD:
1) see 10.205 point 2), reduce max value for /BUFFER: from 61440 to 32768 bytes
2) fix an error on computing max buffersize when /BUFFER: switch is used
changes in 10.209:
USBD:
1) added some tracing (trace code = 0xE3 = 227)
2) back out change 2) in 10.208 (thanks Doug Bissett)
3) back out a change accidentally introduced in 10.208 (request device descriptor specifying
64 bytes in the standard request length field to fix some broken old devices, we better ignore buggy stuff)
4) do not clear stalled default control pipe (endpoint zero) for hubs. In particular the USB data toggle state
of the hub notification pipe was messed up due to this error which would result in an error in the
notification pipe (device attach and detach is no longer properly detected as a result)
5) change handling of "Set Configuration" request notification to point back to initiating client/class driver
so that pipe stall handling can work correctly (in case of stalled pipe)
USBKBD:
1) get rid of an error that lead to a stall of the default control pipe (a command was accidentally issued twice)
2) properly preset data toggle flag on initial arming and after pipe stall of interrupt data pipe
USBMOUSE:
1) properly preset data toggle flag on initial arming and after pipe stall of interrupt data pipe
USBHID:
1) change stalled pipe handling (for pipes that USBHID uses) to be in line with what USBD.SYS does
USBPRT,USBCOM,USBETHR:
1) clean up and unify change stalled pipe handling
USBAUDIO:
1) clean up and unify change stalled pipe handling
2) rework control setting (volume,bass,treble), properly mix master volume setting with application volume setting
3) silence USB device/free USB bandwidth (set AS interface to alternate setting 0)
on a "StreamStop" and "StreamPause" command
USBUHCD:
1) add a fix (increase number of top level and bottom level QHs from 10 to 12)
so that change in USBMSD (see 10.205 , USBMSD point 2) will not lead to chkdsk
problems on attaching a USB 1.x MSD device to a UHCI host controller if maximum size
is selected (equivalent to /BUFFER: command line argument not specified)
(thanks Wim Brul)
changes in 10.208:
USBEHCD:
1) if TD allocation failed for an isochronous request the protection spinlock would not
be released which would lead to a system hang (thanks Wim Brul)
2) QH was wrongly deallocated when creation of TD list or attachal of TD list would fail
for new request
3) QH "endpoint zero in use" flag would not be reset if creation of TD list would fail
for a new endpoint zero request
USBOHCD,USBUHCD:
1) change code to be analogue to that of USBEHCD
USBD:
1) back out change done between 10.999 and 10.200:
do NOT cancel requests against a stalled endpoint, this will hopefully avoid the hangs
that people are experiencing when using certain USB devices (those that on error will fail
with a stalled endpoint) (thanks Martin Vieregg)
2) do NOT cancel requests against default address on a device attach (this is properly done
on device detach if necessary)
changes in 10.207:
USBD:
1) reenable suspend/resume notification to USBMSD.ADD
2) changes so that the remove wakeup capability (mouse/keyboard ability to wake up a suspended system)
is properly enabled
USBEHCD,USBOHCD,USBUHCD:
1) changes to suspend/resume code
USBMSD:
1) rework suspend/resume code in the IDC APMService call as well as in ExecuteUSBIO (set up and start a command),
FinishUSBIO (command termination handling) and MSDCheckForService and MSDDetachDevice
(update all these to deal with device port disconnect and reconnect on suspend/resume)
2) add tracing for suspend/resume
3) change function ProcessStatus to NOT fill uncompleted data transfer buffers with zero, if the transfer
was not fully completed, the driver will retry the operation anyways
4) another fix to DevHelp_PageListToLin handling, only handle one scatter/gather list element at a time
USBHID:
1) for the /S switch, do not create a UConv object via "KernCreateUConvObject16" but let function "KernStrFromUcs16"
create one dynamically (let the system find out which code page is in use)
USBCALLS:
1) correct case of export names for REXX functions RXUSBIRQREAD,RXUSBIRQWRITE,RXUSBCTRLTRANSFER,RXUSBDATATRANSFER
USBCOM:
1) change driver to skip any COMx and LPTx device names declared by other drivers such as COM.SYS, PSCOM.SYS and also
RDRHELP.200. The latter is part of IBM Lan Server and declares virtual devices. USBCOM.SYS would not correctly skip the
COMx device names declared by RDRHELP.200 (also exports NET$RDR$ device name) when creating a unique COMx device name.
changes in 10.206:
USBMSD:
1) leaving interrupts (globally) enabled when using DevHelp_PhysToVirt and DevHelp_PageListToLin as under
the given conditions it is not necessary to (globally) disable and reenable them, this was done in order to
minimize impact on devices needing a timely interrupt response (like audio devices, for example)
2) added additional tracing in order to catch problems with transmission requests not being fully
executed (only part of the requested sectors being transferred)
3) fix a bug on computing number of successfully transferred sectors (need to use 32-bit division
instead of 16-bit division). This would lead to endless attempts to reissue the transmission
command if the overall amount to transfer was exactly 64 kBytes (which is also the absolute limit
an ADD will ever be requested to transmit in one shot)
4) some minor changes and code cleanup of things that would never be executed as they would never work
anyways
5) for people having problems opening a OpenOffice supported document from a FAT32 stick: these latest
changes also fix the problem where older USBMSD versions would always return with error:
"invalid parameter" on an attempt to open the document (however, copying the document from the FAT32 stick
to a hard drive and opening it from there would work).
I don't know why this error now went away but I assume that the fixes also fixed a problem with EA support
(if /EAS switch is specified for FAT32.IFS).
changes in 10.205:
USBMSD:
1) fixed a serious bug that under specific conditions could lead to clipped or corrupted files.
Unfortunately, the file size might even have been reported correctly after a write
and no indication of an error was given to the user.
The DDK code that this driver builds upon is unfortunately older than
the final 10.162 version of USBMSD.ADD delivered by IBM, therefore I don't know
if that error also exists in 10.162 or not.
2) increased buffer range for /BUFFER: switch for USB 1.x only systems / USB 1.x devices
3) prevent executing a command while another command is still in progress, this typically
leads to problems with device detection if many are already plugged in on bootup
changes in 10.204:
USBEHCD.SYS,USBOHCD.SYS: back out changes done in 10.203, powering off ports leads
to a hang on the next boot on many systems, also EHCI BIOS handover restored to what
it was before
USBMSD:
1) on device attach, dynamically adapt the number of times to call "TEST_UNIT_READY"
when waiting for a device to become ready,
this should improve device attach for USB disks that might take a very long time
until they finally become ready (spinning up the disk etc.)
2) completely rework the LOCK/UNLOCK/EJECT handling: do not issue commands
for USB sticks/USB hard disks but instead return immediately indicating success
(many of these devices do not properly support these commands), also
DO NOT call IORBDone ("command processed" notification to OS2DASD.DMD/OS2CDROM.DMD)
while a command is still executing !
3) move all segment locking from INIT_COMPLETE to INIT, the DMDs will issue IORB commands
to the ADD already before INIT_COMPLETE
4) allow to wipe a large floppy formatted stick with DFSee and then to use lvm/minilvm to
partition the stick under OS/2 and format the partition(s)
5) fix a trap on unplugging and/or replugging a device while a transfer is still in progress
USBEHCD,USBOHCD,USBUHCD,USBD:
1) cosmetic fix to context hook stubs: make sure that DS is set on function entry
(should not be necessary but won't hurt either ...)
USBETHR.OS2:
1) to the better or worse: added the USB ethernet driver
(this driver is limited to Kawasaki LSI KL5KUSB101 chip)
changes in 10.203:
USBMOUSE.SYS, USBKBD.SYS:
1) fixed a problem with /V switch (even without /V, startup message would be shown on bootup)
USBMSD:
1) update OS2CDROM.DMD callback processing so that multiple USB CD-ROM devices can actually be handled
2) skip "GetMaxLUN" command for protocol type "BulkOnly" devices if their subclass is not also "SCSI"
("GetMaxLUN" hangs for many devices and will prevent device attachal)
3) successfully finish the device attach phase even if no media is inserted in the CD-ROM drive
(allows you to boot with CD-ROM drive attached but no media yet inserted)
4) implement "command queueing" (wait for issued command to finish before sending next) in order to prevent
erroneous device behaviour
5) reduce the number of occasions where a MSD reset is driven and prevent recursive MSD resets
USBEHCD.SYS:
1) increase timeouts for BIOS handover
USBEHCD.SYS, USBOHCD.SYS:
1) for /FS switch specified, power off all ports before host controller reset
changes in 10.202:
USBD.SYS:
1) fix a trap on device attach (handling of unexpected error condition)
2) fix a potential problem when allocation of memory structure to manage
newly inserted device fails
changes in 10.201:
USBD.SYS:
1) replace a blocking delay between Master and Companion controller
enumeration phases with a timer routine triggered phase invocation
this is to fix a problem on some systems that will completely
block on bootup with the old approach of using a blocking delay
USBMSD.ADD:
1) add additional tracing
2) fix a trap on system start when tracing is enabled through config.sys
3) set default sense if requested by DMD for those cases where
no command invocation takes place and therefore
no sense info is generated
4) floppy drives: on processing sense data, only set "MEDIUM INSERTED" flag
if the sense data indicates that media change has taken place
this prevents a system block if you invoke "Lock" on a diskette drive
that has no media inserted
5) floppy drives: change handling of lock command so that you will get a sensible
error text instead of no visual feedback at all in case no media is inserted
6) floppy drives: chain in a "TEST_UNIT_READY" command
(done by issuing a IOCC_UNIT_STATUS / IOCM_GET_UNIT_STATUS request)
before any read/write transfer command if no disk insertion has yet been detected,
this is for floppy drives that expect a TEST_UNIT_READY command
in order to determine if media is inserted or not (drives without changeline support)
7) floppy drives: reject a read/write command for as long as no medium has yet been inserted
this is to prevent endless looping for floppy access when opening the drives folder
in XWorkplace
USBUHCD.SYS,USBOHCD.SYS,USBEHCD.SYS
1) fixed a trap for isochronous transfer buffer handling (properly serialize adding/removing buffers)
changes in 10.200:
USBD.SYS:
1) changes to support old and/or small USB sticks
2) serialize HC reset: reset master (EHCI) controllers first,
then reset companion (UHCI,OHCI) controllers,
delay resetting of HCs until most/all of the RUN statements
in config.sys have been executed
this is hopefully solving some device attachal problems
for devices already attached on bootup
3) changes in controlling use of default address (address 0)
USBHID.SYS, USBD.SYS:
1) fixes to clearing a stalled pipe
USBEHCD.SYS, USBOHCD.SYS, USBUHCD.SYS:
1) increase timeout for setting device address (for slow devices)
2) per device, serialize access to endpoint zero
3) increase host controller reset time when /FS switch is used
USBEHCD.SYS, USBOHCD.SYS
1) remove port power on on host controller reset, this is supposed
to get rid of problems where devices will not properly be detected
if already plugged in on bootup
USBMSD.ADD:
1) changes to support old and/or small USB sticks
2) only use "MODE SENSE (10), flexible disk page" command on USB floppy drives,
apparently many new USB sticks do not or do not properly support this command
(and in the scope of USBMSD.ADD it's only relevant to floppy drives anyway)
USBAUDIO.SYS:
1) changes to make volume/bass/treble setting work
2) added initial tracing support (major trace code: 238)
USBCALLS.DLL:
1) added missing exports for REXX functions
"RxUsbDeviceClearFeature"
"RxUsbInterfaceClearFeature"
"RxUsbEndpintClearFeature"
"RxUsbEndpointClearHalt"
changes in 10.199:
USBMSD.ADD:
1) make drives > 65536*255*63 sectors (500 GB) work
2) do changes in 1) also for virtualized large floppy media (Windows formatted USB sticks)
3) increase timeouts for drives that take very long to resume from sleep
4) change device attach to closer match the Windows way of doing things
5) do not send REQUEST_SENSE after each TEST_UNIT_READY command
in order to reduce the number of commands sent
USBD.SYS (,USBxHCD.SYS):
1) deal with external hubs sending more status change pipe data then they should
(gleaned from the Linux implementation)
USBPRT.SYS:
1) change the way stalled pipes are cleared (clear transmission error to get device operational again)
USBCALLS.DLL (,USBRESMG.SYS):
1) latest updates to the interface functions (C and REXX interface)
-----------------------------------------------------------------------------------------------------------------------
Parameters supported by these drivers:
USBUHCD.SYS,USBOHCD.SYS,USBEHCD.SYS,USBD.SYS: /V: give some information on bootup (also supported by 10.162 drivers)
USBUHCD.SYS,USBOHCD.SYS,USBEHCD.SYS: /FS: on shutdown, put the HC into reset instead of just letting it execute
this is supposed to solve some problems on next bootup
(also supported by 10.162 drivers)
USBEHCD.SYS /S:x (where x=1,2,4,8,16,32,64), according to Robert Lalla, lower values are
supposed to improve throughput. Technically, it will set
"Interrupt Threshold Control", see EHCI spec
(x=1: raise interrupt every 1ms frame,
x=64: raise interrupt every 64th 1ms frame), this parameter might need
some experimentation for optimal throughput/latency
USBHID.SYS /V: give some information on bootup (also supported by 10.162 drivers)
USBPRT.SYS /V: give some information on bootup (also supported by 10.162 drivers)
/L: do all dynamic memory allocation in lower physical 16 MB (normally not necessary)
/LPT : set driver name as printer name (by default name is $USBPRT)
USBCOM.SYS /V: give some information on bootup (also supported by 10.162 drivers)
/L: do all dynamic memory allocation in lower physical 16 MB (normally not necessary)
USBAUDIO.SYS,USBAUD2.SYS: /V: give some information on bootup (also supported by 10.162 drivers)
/L: do all dynamic memory allocation in lower physical 16 MB (normally not necessary)
USBMSD.ADD /V: give some information on bootup (also supported by 10.162 drivers)
/REMOVABLES:x : specify that you intend to use up to x USB removable devices (memory sticks)
/FLOPPIES:x : specify that you intend to use up to x USB floppy drives
/CDS:x : specify that you intend to use up to x USB CD-ROMs
/OPTICALS:x : specify that you intend to use up to x USB optical drives
/MAX_FLOPPY : specify that you intend to use LS-120/LS-240 USB drives
/A_USAGE:n : n=0->do not attempt to assign drive letter A: to first floppy
: n=1->assign drive letter A: to first floppy in any case
: n=2->assign drive letter A: to first floppy but only
if no other driver (IBM1FLPY.ADD for example) is using drive letter A:
/BUFFER:x : specify max transfer buffer size in bytes (min:8192 bytes, max:20480 bytes)
it is recommended to not specify this switch unless using a USB 1.x only system
or using USB 1.x MSD devices (some USB card readers, for example)
/FIXED_DISKS:, /REMOVABLE_AS_FLOPPY, /CHS, /MS10_OFF switches removed !
They are no longer needed with the contained driver.
Note: use of USBCDROM.ADD is NOT necessary to use a CD-ROM !
You can achieve the same functionality by specifying /CDS:x switch for USBMSD.ADD.
USBMOUSE.SYS /V: give some information on bootup (also supported by 10.162 drivers)
USBKBD.SYS /V: give some information on bootup (also supported by 10.162 drivers)
Make sure you back up your existing drivers ! These drivers come without any warranty whatsoever. If they don't work
for you, revert back to your backed up drivers.
-----------------------------------------------------------------------------------------------------------------------
Important note: if you have problems using the USB widget from eCenter/XCenter (part of eWorkplace/XWorkplace):
You can revert back to the original daemon program that handles USB devices attaches/detaches.
This is \ecs\boot\USBMSDD.EXE.
Here is a piece of REXX code to create a program object in the startup folder:
/* REXX script */
if RxFuncAdd('SysLoadFuncs','REXXUTIL','SysLoadFuncs') then do
rc = SysLoadFuncs()
end
bootDrive = SysBootDrive()
class='WPProgram'
title='USB-Monitor V1.2'
location='<WP_START>'
app='EXENAME='bootDrive'\ecs\boot\usbmsdd.exe'
startupdir='STARTUPDIR='bootDrive'\ecs\boot'
parameters='PARAMETERS='bootDrive'\ecs\boot\usbmsdd.ini'
icon='ICONFILE='bootDrive'\os2\boot\usbmon.ico'
iconpos='ICONPOS=0,0'
open='OPEN=RUNNING'
minimized='MINIMIZED=YES'
progtype='PROGTYPE=WINDOWABLEVIO'
autoclose='NOAUTOCLOSE=NO'
objectid='OBJECTID=<USB_MON>'
rc = SysCreateObject(class,title,location,app';'startupdir';'parameters';'icon';'iconpos';'open';'minimized';'progtype';'autoclose';'objectid';','R')
if rc==0 then
ret = 0
else
ret = 1
return ret
Save this to a file with extension .cmd and execute from a commandline. Of course you can modify the title and/or object id to whatever you like.
-----------------------------------------------------------------------------------------------------------------------
Enabling Tracing and taking a trace
Many of the USB drivers support tracing. This means that operational data that allows offline error diagnosis is saved to a piece of memory
called trace buffer. Then this memory can be read, the contents formatted and saved away as a file.
The following drivers have these major trace codes:
USBUHCD.SYS: 224
USBOHCD.SYS: 225
USBEHCD.SYS: 226
USBD.SYS: 227
USBHID.SYS,USBKBD.SYS,USBMOUSE.SYS: 228 (minor codes: HID:0x00-0x3F, USBMOUSE: 0x40-0x7F, USBKBD: 0x80-0xFF)
USBCOM.SYS: 229
USBAUDIO.SYS,USBAUD2.SYS: 238 (minor codes: USBAUDIO: 0x00-0x7F, USBAUD2: 0x80-0xFF)
USBMSD.ADD: 239
1) In order to enable tracing for say major trace code 239 (USBMSD.ADD), add this to config.sys and reboot:
TRACEBUF=2048 /M=W,Q,NODTI /D=ALL
TRACE=ON 239
Note: in order to say trace 224,225 and 226 you'd enter:
TRACEBUF=2048 /M=W,Q,NODTI /D=ALL
TRACE=ON 224,225,226
2) try to reproduce any problem that you want to trace
3) once you are done, run "tracefmt.exe" which will format the collected info. Then do a File->Save Formatted and save to a file with extension .ftf
Make sure you save a FORMATTED trace and not an UNFORMATTED trace !
4) Send the .ftf file to me
Note: if your system traps once you did 1) then you need to get a replacement OS2DLR:
http://212.12.30.18/other/QS_LDR.ZIP
Read the contained readme in order to learn how to replace OS2LDR against the one contained in the package.
-----------------------------------------------------------------------------------------------------------------------
FAQ
Q: I am using the drivers from the ArcaNoae website and they work fine for me. Why should I use the drivers in this package ?
A: You shouldn't. These drivers are meant for those where the ArcaNoae drivers do not work.
Q: Can I mix the ArcaNoae drivers with the ones from the package ?
A: No you cannot, except for USBMSD.ADD. The ArcaNoae drivers have a builtin version check that will fail with the drivers
from this package. The exception (for now) is USBMSD.ADD which is an updated version that is currently under development.
Q: Can I mix different versions of drivers ?
A: No you cannot. The problems is that there are logical dependencies between USBHID.SYS and USBMOUSE.SYS/USBKBD.SYS,
between USBD.SYS and USBAUDIO.SYS/USBMSD.ADD/USBCOM.SYS/USBPRT.SYS/USBHID.SYS/USBETHR.OS2 and between USBD.SYS and
USBUHCD.SYS/USBOHCD.SYS/USBEHCD.SYS.
Putting it all together: all drivers are directly or indirectly dependent on one another.
Q: I tried your drivers but I would like to revert back to the ArcaNoae drivers. How ?
A: Just rerun the ArcaNoae USB WPI install and have it overwrite all files. Remember that you might be forced to boot from
your eCS installation CD-ROM, for example, if your USB mouse/keyboard fails with drivers contained in this package.
For this reason, it is a good idea to make backup copies of the ArcaNoae provided drivers which will allow you to copy
them back from a commandline.
Q: Why does the USBAUDIO / USBAUD2 driver come as a zip package (copied to the \MMOS2 directory) within this zip ?
A: For audio drivers it's not sufficient to just copy them to a directory and modify config.sys.
They need to be installed via the "minstall" tool.
You need to extract the USBAUDIO.ZIP / USBAUD2.ZIP file into a temporary directory, open a commandline and run "minstall /*"
from within that directory. That will properly install the USB Audio Driver.
Note that the ArcaNoae drivers might add an entry to config.sys for USBAUDIO.SYS which you will need to remove/comment out first.
Q: Why does USBWAV come as a zip package (copied to the \MMOS2 directory) within this zip ?
A: For IOProcedures it's not sufficient to just copy files to a directory.
They need to be installed via the "minstall" tool.
You need to extract the USBWAV.ZIP file into a temporary directory, open a commandline and run "minstall /*" from within that directory.
That will properly install the sample rate conversion IOProcedure.
Note: the Zip also contains a file called "listprocs.exe" that will list which IOProcedures are installed on your system and what the
entry points are. You can use this to check correct installation of USBWAV. You can also pass it a WAV file and have it play that file.
Q: The ArcaNoae drivers come in a nifty WPI install package. Why don't you do the same ?
A: I am too lazy/have too little time. Just copy the zip into the root directory of your drive and do a "unzip usbdrv2xx.zip" to
have it unzip all contained files to the proper directories. You can run "unzip -lM usbdrv2xx.zip" to view the ZIPs contents first.
You will also need to manually update your config.sys if necessary (USBAUDIO / USBAUD2 is the exception see preceding question).
Q: So what's the deal with the contained USBMSD.ADD ?
A: It's an updated driver that will allow you to seamlessly use Windows formatted USB sticks (provided that you also have the
proper filesystem installed, for example FAT32.IFS if your Windows formatted stick was formatted with FAT32).
Explanation: Unless you explicitely partition it, Windows will format a USB stick as a "large floppy".
That means, it is not partitioned and will resemble the media layout of a floppy disk (therefore the name: "large floppy").
Sticks formatted in this way are not supported by IBM version 10.162 of USBMSD.ADD
even when you specify the /REMOVABLE_AS_FLOPPY switch (which is no longer necessary with this updated driver).
All partitioned USB media (for example, media that you partitioned under OS/2) will continue to work as before.
Q: How do I change a large floppy formatted stick to a partitioned stick ?
A: Use DFSee to wipe the first sectors of the stick (Mode=FDISK -> Wipe start of disk to ZERO).
USBMSD.ADD will detect this and will turn off large floppy media support and
instead will treat the media as a media that is to be partitioned. Eject the media (by running eject.exe X: if X: is the drive letter)
and do a "Refresh Removable Media" (by double clicking the corresponding icon or by running lvm.exe /rediscoverprm from a command line).
You can then use lvm.exe or minilvm.exe to partition the media. Once you have done this you can format the just created partition(s).
Q: What's the drawback with USBMSD.ADD ?
A: It's under development. In contrast to the IBM provided driver version 10.162 it can also not handle multi-LUN devices
(example of a multi-LUN device is a USB cardreader with multiple slots). Multi-LUN support is still on the todo list.
Q: How does USBRESMG.SYS and USBCALLS.DLL differ from the drivers from Wim Brul ?
A: USBRESMG.SYS and USBCALLS.DLL match the latest drivers from Wim Brul. If Wim's drivers work for you,
these 2 should also work for you.
Q: What is the /L switch of USBCOM.SYS,USBPRT.SYS,USBAUDIO.SYS good for ?
A: The host controller specifications (UHCI,OHCI,EHCI) mandate that a host controller shall be able to address physical
memory with 32-bit addressing, for EHCI it is optional to support physical addresses up to 64-bit.
However, (older ?) NVIDIA host controllers only supported 31 bits of physical addresses (at least when accessing
management structures that are placed into memory). The /L switch will allocate below the 16 MB physical address line
(therefore 24 address bits are sufficient) for all memory that the drivers allocate dynamically.
It is highly unlikely you will ever need this switch but if you have continued data transmission failure you might want
to try these switches.
|
Add new comment