master(4) master(4) NAME master - master configuration database DESCRIPTION The master configuration database is a collection of files. Each file contains configuration information for a device or module that can be included in the system. A file is named with the module name to which it applies. This collection of files is maintained in a directory called /var/sysgen/master.d. Each individual file has an identical format. For convenience, this collection of files is referred to as the master file, as though it was a single file. This allows a reference to the master file to be understood to mean the individual file in the master.d directory that corresponds to the name of a device or module. The master file is used by the lboot(1M) program to obtain device information to generate the device driver and configurable module files. master consists of two parts; they are separated by a line with a dollar sign ($) in column 1. Part 1 contains device information for both hardware and software devices and loadable modules. Part 2 contains parameter declarations. Any line with an asterisk (*) in column 1 is treated as a comment. Part 1, Description Hardware devices, software drivers, and loadable modules are defined with a line containing the following information. Field 1 must begin in the leftmost position on the line. Fields are separated by white space (tab or blank). Field 1: Element characteristics: o specify only once r required device b block device c character device t initialize cdevsw[].d_ttys j filesystem s software driver f STREAMS driver m STREAMS module x not a driver; a loadable module k kernel module u a stubs module that is loaded after all other normal modules n driver is fully semaphored for multi-processor operation; the n and p directives are ignored on single-processor systems p driver is not semaphored and should run on only one processor w driver is prepared to perform any cache write back operation required on write data passed via the strategy routine d dynamically loadable kernel module R auto-registrable dynamically loadable kernel module N don't allow auto-unload of dynamically loadable kernel module D load, then unload a dynamically loadable kernel module e ethernet driver Field 2: Handler prefix (14 characters maximum). Field 3: Software driver external major number; a dash (-) if not a software driver or to be assigned during execution of lboot(1M). Multiple major numbers can be specified, separated by commas. Field 4: Number of sub-devices per device; a dash (-) if none. Field 5: Dependency list (optional); this is a comma-separated list of other drivers or modules that must be present in the configuration if this module is to be included For each module, two classes of information are required by lboot(1M): external routine references and variable definitions. Routine lines begin with white space and immediately follow the initial module specification line. These lines are free form, thus they can be continued arbitrarily between non-blank tokens as long as the first character of a line is white space. Variable definition lines begin after a line that contains a $ in column one. Variable definitions follow C language conventions, with slight modifications. Part 1, Routine Reference Lines If the IRIX system kernel or other dependent module contains external references to a module, but the module is not configured, these external references are undefined. Therefore, the routine reference lines are used to provide the information necessary to generate appropriate dummy functions at boot time when the driver is not loaded. Routine references are defined as follows: Field 1: Routine name () Field 2: The routine type; one of {} routine_name(){} {nulldev} routine_name(){nulldev();} {nosys} routine_name(){return nosys();} {nodev} routine_name(){return nodev();} {false} routine_name(){return 0;} {true} routine_name(){return 1;} {fsnull} routine_name(){return fsnull();} {fsstray} routine_name(){return fsstray();} {nopkg} routine_name(){nopkg();} {noreach} routine_name(){noreach();} Part 2, Variables Variables can be declared and (optionally) statically initialized on lines after a line whose first character is a dollar sign ($). Variable definitions follow standard C syntax for global declarations, with the following inline substitutions: ##M The internal major number assigned to the current module if it is a device driver; zero if this module is not a device driver. ##E The external major number assigned to the current module; either explicitly defined by the current master file entry, or assigned by lboot(1M). ##C The number of controllers present; this number is determined dynamically by lboot(1M) for hardware devices, or by the number provided in the system file for non-hardware drivers or modules. ##D The number of devices per controller taken directly from the current master file entry. EXAMPLES A sample master file for a shared memory module is named shm. The module is an optional loadable software module that can only be specified once. The module prefix is shm, and it has no major number associated with it. In addition, another module named ipc is necessary for the correct operation of this module. *FLAG PREFIX SOFT #DEV DEPENDENCIES ox shm - - ipc shmsys(){nosys} shmexec(){} shmexit(){} shmfork(){} shmslp(){true} shmtext(){} $ #define SHMMAX 131072 #define SHMMIN 1 #define SHMMNI 100 #define SHMSEG 6 #define SHMALL 512 struct shmid_ds shmem[SHMMNI]; struct shminfo shminfo = { SHMMAX, SHMMIN, SHMMNI, SHMSEG, SHMALL, }; This master file causes routines named shmsys, shmexec, and so on to be generated by the boot program if the shm driver is not loaded and there is a reference to this routine from any other module loaded. When the driver is loaded, the structure array shmem is allocated, and the structure shminfo is allocated and initialized as specified. A sample master file for a VME disk driver is named dkip. The driver is a block and a character device, the driver prefix is dkip, and the external major number is 4. The VME interrupt priority level and vector numbers are declared in the system file /var/sysgen/system (see lboot(1M)). *FLAG PREFIX SOFT #DEV DEPENDENCIES bc dkip 4 - io $$$ /* disk driver variable tables */ #include "sys/dvh.h" #include "sys/dkipreg.h" #include "sys/elog.h" struct iotime dkipiotime[##C][DKIPUPC]; /* io statistics */ struct iobuf dkipctab[##C]; /* controller queues */ struct iobuf dkiputab[##C][DKIPUPC]; /* drive queues */ int dkipmajor = ##E; /* external major # */ This master file causes entries in the block and character device switch tables to be generated if this module is loaded. Since this is a hardware device (implied by the block and character flags), VME interrupt structures are also generated by the boot program. The declared arrays are all sized to the number of controllers present, which is determined by the boot program based on information in the system file /var/sysgen/system. FILES /var/sysgen/master.d/* /var/sysgen/system SEE ALSO lboot(1M), mload(4), system(4). Page 4