2 * ioconf: ioconf configuration file handling code
3 * Original code (C) 2004 by Red Hat (Charlie Bennett <ccb@redhat.com>)
5 * Modified and maintained by Sebastien GODARD (sysstat <at> orange.fr)
11 #include "sysconfig.h"
13 #define IOC_NAMELEN 31
14 #define IOC_DESCLEN 63
16 #define IOC_LINESIZ 255
22 #define IOC_MAXMINOR ((1U << MINORBITS) - 1)
24 /* #define MAX_BLKDEV ((1U << (32 - MINORBITS)) - 1) */
25 /* Use a lower value since this value is used to allocate arrays statically in ioconf.c */
26 #define MAX_BLKDEV 511
29 #define K_NODEV "nodev"
31 #define IS_WHOLE(maj,min) ((min % ioconf[maj]->blkp->pcount) == 0)
34 * When is C going to get templates?
36 #define IOC_ALLOC(P,TYPE,SIZE) \
39 P = (TYPE *) malloc(SIZE); \
43 goto free_and_return; \
48 /* That dummy while allows ';' on the line that invokes the macro... */
52 char name[IOC_NAMELEN + 1]; /* device basename */
53 char cfmt[IOC_FMTLEN + 1]; /* controller format string */
54 char dfmt[IOC_FMTLEN + 1]; /* disk format string */
55 char pfmt[IOC_FMTLEN + 1]; /* partition format string */
56 /* ctrlno is in the ioc_entry */
57 unsigned int ctrl_explicit; /* use "cN" in name */
58 unsigned int dcount; /* number of devices handled by this major */
59 unsigned int pcount; /* partitions per device */
60 char desc[IOC_DESCLEN + 1];
61 /* disk info unit # conversion function */
62 char *(*cconv)(unsigned int);
64 /* extension properties (all this for initrd?) */
65 char ext_name[IOC_NAMELEN + 1];
66 unsigned int ext; /* flag - this is an extension record */
67 unsigned int ext_minor; /* which minor does this apply to */
70 #define BLK_CONFIG_SIZE (sizeof(struct blk_config))
74 int live; /* is this a Direct entry? */
75 unsigned int ctrlno; /* controller number */
76 unsigned int basemajor; /* Major number of the template */
77 char *desc; /* (dynamic) per-controller description */
78 struct blk_config *blkp; /* the real info, may be a shared ref */
81 #define IOC_ENTRY_SIZE (sizeof(struct ioc_entry))
85 (unsigned int, unsigned int);
87 (unsigned int, unsigned int);
88 char *transform_devmapname
89 (unsigned int, unsigned int);