1/* 2 * ioconf: ioconf configuration file handling code 3 * Original code (C) 2004 by Red Hat (Charlie Bennett <ccb@redhat.com>) 4 * 5 * Modified and maintained by Sebastien GODARD (sysstat <at> orange.fr) 6 */ 7 8#ifndef _IOCONF_H 9#define _IOCONF_H 10 11#include "sysconfig.h" 12 13#define IOC_NAMELEN 31 14#define IOC_DESCLEN 63 15#define IOC_DEVLEN 47 16#define IOC_MAXMINOR 2047 17#define IOC_LINESIZ 255 18#define IOC_PARTLEN 7 19#define IOC_FMTLEN 15 20 21#ifndef MAX_BLKDEV 22#define MAX_BLKDEV 255 23#endif 24 25#define K_NODEV "nodev" 26 27#define IS_WHOLE(maj,min) ((min % ioconf[maj]->blkp->pcount) == 0) 28 29/* 30 * When is C going to get templates? 31 */ 32#define IOC_ALLOC(P,TYPE,SIZE) \ 33 do { \ 34 if (P == NULL) { \ 35 P = (TYPE *) malloc(SIZE); \ 36 if (P == NULL) { \ 37 perror("malloc"); \ 38 ioc_free(); \ 39 return 0; \ 40 } \ 41 } \ 42 } \ 43 while (0) 44/* That dummy while allows ';' on the line that invokes the macro... */ 45 46 47struct blk_config { 48 char name[IOC_NAMELEN + 1]; /* device basename */ 49 char cfmt[IOC_FMTLEN + 1]; /* controller format string */ 50 char dfmt[IOC_FMTLEN + 1]; /* disk format string */ 51 char pfmt[IOC_FMTLEN + 1]; /* partition format string */ 52 /* ctrlno is in the ioc_entry */ 53 unsigned int ctrl_explicit; /* use "cN" in name */ 54 unsigned int dcount; /* number of devices handled by this major */ 55 unsigned int pcount; /* partitions per device */ 56 char desc[IOC_DESCLEN + 1]; 57 /* disk info unit # conversion function */ 58 char *(*cconv)(unsigned int); 59 60 /* extension properties (all this for initrd?) */ 61 char ext_name[IOC_NAMELEN + 1]; 62 unsigned int ext; /* flag - this is an extension record */ 63 unsigned int ext_minor; /* which minor does this apply to */ 64}; 65 66#define BLK_CONFIG_SIZE (sizeof(struct blk_config)) 67 68 69struct ioc_entry { 70 int live; /* is this a Direct entry? */ 71 unsigned int ctrlno; /* controller number */ 72 unsigned int basemajor; /* Major number of the template */ 73 char *desc; /* (dynamic) per-controller description */ 74 struct blk_config *blkp; /* the real info, may be a shared ref */ 75}; 76 77#define IOC_ENTRY_SIZE (sizeof(struct ioc_entry)) 78 79 80extern int ioc_iswhole(unsigned int, unsigned int); 81extern char *ioc_name(unsigned int, unsigned int); 82extern char *transform_devmapname(unsigned int, unsigned int); 83 84#endif 85