#include <sys/types.h> #include <sys/conf.h> #include <sys/sad.h> #include <sys/stropts.h>int ioctl (int fildes, int command, . . . /* arg */);
fildes is an open file descriptor that refers to the sad driver. command determines the control function to be performed as described below. arg represents additional information that is needed by this command. The type of arg depends upon the command, but it is generally an integer or a pointer to a command-specific data structure.
uint sap_cmd; long sap_major; long sap_minor; long sap_lastminor; long sap_npush; uint sap_list[MAXAPUSH] [FMNAMESZ + 1]; char sap_modname[FMNAMESZ + 1];The
sap_cmd
member indicates the type of configuration
to be performed.
It may take one of the following values:
The sap_major
member is the major
device number of the device to be configured.
If sap_major
is set to -1, the sap_modname
(module name) member is used to specify the device that
is to be configured.
This specification method is mandatory for DDI 8
modules but it will also work with previous versions of the DDI.
When used with the SAP_RANGE command,
the sap_lastminor
member determines the
upper limit of the range of minor devices (or channels),
from sap_minor
to sap_lastminor
inclusively, which are to be configured.
When the SAP_CLONE command is used with
modules that conform to versions of the DDI prior
to DDI 8, sap_minor
represents
the minor number that is used to open a clone device.
When the SAP_CLONE command is used with
modules that conform to DDI 8,
sap_minor
represents
the clone channel that is used to open a device.
sap_minor
and sap_lastminor
have no meaning for the SAP_ALL command.
The sap_npush
member indicates the number of
modules to be automatically pushed when the device is opened.
It must be less than or equal to MAXAPUSH,
defined in sad.h.
It must also be less than or equal to NSTRPUSH,
the maximum number of modules that can be pushed on a stream,
defined in the kernel master file.
The member sap_list
is an array of module names to be
pushed in the order in which they appear in the list.
When using the SAP_CLEAR command,
set only sap_major
, sap_minor
, and
possibly sap_modname
(if sap_major
is set to -1).
This will undo the configuration information for any of the other commands.
If a previous entry was configured as SAP_ALL,
sap_minor
should be set to 0.
If a previous entry was configured as SAP_RANGE,
sap_minor
should
be set to the lowest minor device (or channel)
number in the range configured.
On failure, errno is set to the following value:
sap_lastminor
is not greater than
sap_minor
,
or the command is SAP_CLEAR and sap_minor
is not
equal to the first minor in the range.
For pre-DDI 8 modules,
set the sap_major
and
sap_minor
members of the
strapush structure to the major and
minor device numbers, respectively, of
the device.
For DDI 8 modules,
set sap_major
to -1,
sap_modname
to the module name, and
sap_minor
to the channel number
of the device.
On return, the strapush structure will be filled in with the entire
information used to configure the device.
Unused entries in the module list will be zero-filled.
On failure, errno is set to one of the following values:
int sl_nmods; struct str_mlist *sl_modlist;The str_mlist structure has the following member:
char l_name[FMNAMESZ+1];sl_nmods indicates the number of entries that the user has allocated in the array and sl_modlist points to the array of module names. The return value is 0 if the list is valid, 1 if the list contains an invalid module name, or -1 on failure. On failure, errno is set to one of the following values:
sl_nmods
member of the str_list
structure is less than or equal to 0.