libcam.so

Updated: April 19, 2023

Common access methods support

Syntax:

driver [cam option[,option…]]

Runs on:

QNX Neutrino

Options:

The driver is one of the block device (devb-*) drivers. The cam options control the driver's interface to libcam.so. These options must follow the cam keyword, and can be any of the ones described below. Not all options apply to all block device drivers.

async
Perform CPU cache invalidation after an I/O operation in a thread that's separate from the one that's notifying the upper layer. In some cases, and on some boards, this can provide a performance boost.
bounce[=size]
Enable the driver's “bounce” buffer and optionally specify its size. The bounce buffer acts as an intermediate buffer for doing transfers to/from the media. Bounce buffers are useful for devices that can't access the full range of memory available to the CPU. If you specify the size, it should be sufficiently large that the CAM library doesn't fragment I/O requests from io-blk.so; this will show markedly better performance. This option is automatically enabled when cached memory buffer usage is disabled or when the hardware doesn't support snooping.

The size argument can include a case-insensitive suffix that indicates the units: B (bytes; the default), K (kilobytes), M (megabytes), or P (pages). The default is 32 KB.

cache[=on|off]
Specify to perform cache invalidation or cache flushes on the buffers. Map the bounce buffer as PROT_NOCACHE (cache=off) or not (cache or cache=on). The default is on.
lun=mask
Enable Logical Unit Number (LUN) scan for the devices specified in mask. The mask is a hexadecimal bitmask specifying which IDs to scan for; the default is 0x00.
maxio=wr:rd
Set the maximum number of I/O write blocks (wr) and read blocks (rd). The default for both settings is 4096, but the maximum supported number is limited by the device.
noio
Completely remove the IO ability. Neither ThreadCtl(_NTO_TCTL_IO, ...) nor ThreadCtl(_NTO_TCTL_IO_PRIV, ...) will be called.
nopriv
Don't call ThreadCtl(_NTO_TCTL_IO_PRIV, ...).
pnp
Enable CAM plug and play (i.e., don't exit at startup when no devices are found). The default is off.
resmgr=m:l:h:d
Enable the /dev/camX/XXX interface and set the maximum (m), low (l), high (h), and devno (d) thread-pool parameters. This option provides an interface to send CAM SCSI passthrough requests that bypass the io-blk media relearn.

The default is 5:1:2:-1.

retries=num
Specify the number of times to retry an operation before indicating to the filesystem that an I/O error occurred. The default is 10.
smmu[=0|1|off|on]
(QNX Neutrino 7.0.4 or later) Specify whether or not support for the system memory management unit (IOMMU/SMMU) manager (smmuman) is required. If you don't provide a value for this option, support is enabled, but you can explicitly enable it with the 1 or on setting, or disable it with 0 or off. For more information, see the SMMUMAN User's Guide.

The default is off; if you enable this option and smmuman isn't running, the driver exits.

timeout=g1:g2:g3:rw
Set the group command and read/write timeouts, in seconds. The default values are obtained from the Timeout & Protect mode page if it's supported; otherwise they're 60:90:10:10.

The timeout values are based on the group of the SCSI command being issued. The command and group are defined in the SCSI specification. In most cases, you just want to use the default values for g1, g2, and g3 and change only rw.

user=UID:GID
Operate as the specified user and group IDs. The driver retains the necessary process-manager abilities.
verbose
Increase the verbosity of the low-level hardware driver.

Description:

The libcam.so shared object provides support for common access methods for block device (devb-*) drivers.