These are single or multi-bit values that can be "or-ed" together:
SG_FLAG_DIRECT_IO
This is a request for direct IO on the data transfer. If it cannot
be performed then the driver automatically performs indirect IO
instead. If it is important to find out which type of IO was
performed then check the values from the SG_INFO_DIRECT_IO_MASK in
'info' when the request packet is completed (i.e. after read() or
ioctl(,SG_IO,) ). The default action is to do indirect IO.
SG_FLAG_LUN_INHIBIT
The default action of the sg driver to overwrite internally the top
3 bits of the second SCSI command byte with the LUN associated with
the file descriptor's device. To inhibit this action set this flag.
For SCSI 3 (or later) devices, this internal LUN overwrite does not
occur.
SG_FLAG_MMAP_IO
When set the driver will attempt to procure the reserved buffer. If
the reserved buffer is occupied (EBUSY) or too small (ENOMEM) then
the operation (write() or ioctl(SG_IO)) fails. No data transfers occur
between the dxferp pointer and the reserved buffer (dxferp is ignored).
In order for a user application to access mmap-ed IO, it must have
successfully executed an appropriate mmap() system call on this sg
file descriptor. This precondition is not checked by write() or
ioctl(SG_IO) when this flag is set. Setting this flag and
SG_FLAG_DIRECT_IO results in a EINVAL error.
SG_FLAG_NO_DXFER
When set user space data transfers to or from the kernel buffers do
not take place. This only has effect during indirect IO. This flag
is for testing bus speed (e.g. the "sg_rbuf" utility uses it).