Space.c(4) Space.c(4)
NAME
Space.c - configuration-dependent kernel module data structure
initializations
SYNOPSIS
Space.c
DESCRIPTION
One of the Installable Driver/Tunable Parameters kernel
configuration files, a Space.c file contains storage
allocations and initializations for data structures associated
with a kernel module, when the size or initial value of the
data structures depend on configurable parameters, such as the
number of subdevices configured for a particular device or a
tunable parameter. For example, the Space.c file gives a
driver the ability to allocate storage only for the subdevices
actually being configured, by referencing symbolic constants
defined in the config.h file.
When the Space.c component of a module's Driver Software
Package (DSP) is installed, idinstall(1M) stores the module's
Space.c file information in /etc/conf/pack.d/module-
name/space.c, where module-name is the name of the module
being installed.
Package scripts should never access space.c files directly;
use the idinstall command instead.
The config.h file is a temporary file created in
/etc/conf/cf.d during the system reconfiguration process. The
file contains #define statements that can be used to specify
the following information about the module:
Per module #defines:
---------------------------------------------------------------
#define PRFX Set to 1 if module is configured
#define PRFX_MODNAME Logical name for the module
#define PRFX_CNTLS Number of configured entries in System file
#define PRFX_UNITS Number of subdevices (sum of unit fields)
#define PRFX_BMAJORS Number of block major numbers supported
#define PRFX_BMAJOR_0 Block major numbers supported; the first
major is PRFX_BMAJOR_0, the second
PRFX_BMAJOR_1, and so forth
#define PRFX_CMAJORS Number of character major numbers supported
#define PRFX_CMAJOR_0 Character major numbers supported; the first
major is PRFX_CMAJOR_0, the second
Copyright 1994 Novell, Inc. Page 1
Space.c(4) Space.c(4)
PRFX_CMAJOR_1, and so forth
PRFX_CNTLS is only generated for non-autoconfig hardware
modules (h flag in Master file and autoconf field N in Drvmap
file). PRFX_UNITS is not generated for autoconfig drivers
(autoconf field Y in Drvmap file). PRFX_BMAJORS is only
generated for block device drivers (b flag in Master file).
PRFX_CMAJORS is only generated for character device drivers (c
flag in Master file).
PRFX_MODNAME is the name from the $name line in the Master
file, if any; otherwise, the module-name field is used.
Per instance #defines (PRFX_0 represents the first configured
instance, followed by PRFX_1, and so on if more than one
instance is configured) are generated for non-autoconfig
hardware modules:
----------------------------------------------------------------
#define PRFX_0 Unit field value
#define PRFX_0_VECT Interrupt vector used
#define PRFX_0_TYPE Interrupt vector type
#define PRFX_0_IPL Interrupt priority level
#define PRFX_0_SIOA Starting input/output address
#define PRFX_0_EIOA Ending input/output address
#define PRFX_0_SCMA Starting controller memory address
#define PRFX_0_ECMA Ending controller memory address
#define PRFX_0_CHAN DMA channel used (-1 if none)
Since the module is installed as an object file, the module
itself can not reference the #defines for the configurable
device parameters in config.h. However, the module's Space.c
is a C language source file, and as such, can define variables
which can take on the values of the #defines in config.h.
When the next system configuration is built, the idbuild(1M)
command uses the list of arguments to cc(1) defined in
/etc/conf/cf.d/deflist to compile the module's Space.c file
before linking the module to the kernel.
NOTES
The following two #defines are generated for the Space.c file
for hardware modules only if their values are identical for
all instances:
#define PRFX_CHAN DMA channel used (-1 if none)
#define PRFX_TYPE Interrupt vector type used
#define PRFX_CPUBIND CPU binding for module; -1 if unbound
Copyright 1994 Novell, Inc. Page 2
Space.c(4) Space.c(4)
REFERENCES:
idbuild(1M), Master(4), System(4)
EXAMPLES
#include <config.h>
.
.
.
struct strtty lp_tty[LP_CNTLS]; /* tty structs for each device */
time_t last_time[LP_CNTLS]; /* output char watchdog timeout */
.
.
.
struct lpcfg lpcfg[LP_CNTLS] = {
0, /* state */
LP_0_SIOA+0, /* data register port address */
LP_0_SIOA+1, /* status register port address */
LP_0_SIOA+2, /* control register port address */
LP_0_VECT /* interrupt vector */
#ifdef LP_1
,
/* next structure */
0,
LP_1_SIOA+0,
LP_1_SIOA+1,
LP_1_SIOA+2,
LP_1_VECT
#endif /* LP_1 */
#ifdef LP_2
,
/* next structure */
0,
LP_2_SIOA+0,
LP_2_SIOA+1,
LP_2_SIOA+2,
LP_2_VECT
#endif /* LP_2 */
};
Copyright 1994 Novell, Inc. Page 3