|
|
1.1 ! root 1: #ifndef MDEV_H ! 2: #define MDEV_H ! 3: ! 4: #include "devadm.h" ! 5: ! 6: ! 7: enum { ! 8: MD_DISABLED, ! 9: MD_INSTALLABLE, ! 10: MD_ENABLED ! 11: }; ! 12: ! 13: ! 14: /* ! 15: * Structure of the data gathered by the mdev routines. ! 16: */ ! 17: ! 18: typedef unsigned int maj_t; ! 19: typedef unsigned int min_t; ! 20: ! 21: struct mdevice { ! 22: mdev_t * md_next; /* global list of all entries */ ! 23: mdev_t * md_chrlink; /* for sorts */ ! 24: mdev_t * md_blklink; /* for sorts */ ! 25: mdev_t * md_modlink; /* for sorts */ ! 26: mdev_t * md_cohlink; /* for sorts */ ! 27: ! 28: sdev_t * md_sdevices; /* thread of "sdevice" entries */ ! 29: int md_configure; /* See MD_... constants */ ! 30: int md_interrupt; /* has an enabled interrupt */ ! 31: ! 32: symbol_t * md_devname; /* internal module/device name */ ! 33: symbol_t * md_functions; /* present driver entry points */ ! 34: symbol_t * md_flags; /* driver characteristics */ ! 35: symbol_t * md_prefix; /* driver prefix */ ! 36: maj_t md_blk_maj [2]; /* block major number low, high */ ! 37: maj_t md_chr_maj [2]; /* character major number low, high */ ! 38: min_t md_minor_min; /* minor number minimum */ ! 39: min_t md_minor_max; /* minor number maximum */ ! 40: ! 41: /* ! 42: * The following fields are not used in the Coherent system as yet ! 43: * but are defined by mdevice (4) so we read them. ! 44: */ ! 45: ! 46: int md_dma_chan; /* DMA channel number */ ! 47: int md_cpu_id; /* processor-id */ ! 48: }; ! 49: ! 50: ! 51: /* ! 52: * Types suitable for use as selection and comparison predicates for the ! 53: * mdev_sort () function. ! 54: */ ! 55: ! 56: typedef int (* msel_t) PROTO ((mdev_t * _mdevp)); ! 57: typedef int (* mcmp_t) PROTO ((mdev_t * _left, mdev_t * _right)); ! 58: typedef void (* miter_t) PROTO ((VOID * _extra, mdev_t * _mdevp)); ! 59: ! 60: ! 61: /* ! 62: * For Coherent, the first 32 major numbers are reserved for the use of the ! 63: * old-style Coherent device-driver system. ! 64: */ ! 65: ! 66: enum { ! 67: MAJOR_RESERVED = 32, ! 68: MAX_DEVNAME = 8, ! 69: MAX_PREFIX = 4 ! 70: }; ! 71: ! 72: enum { ! 73: MDEV_OPEN = 'o', ! 74: MDEV_CLOSE = 'c', ! 75: MDEV_READ = 'r', ! 76: MDEV_WRITE = 'w', ! 77: MDEV_IOCTL = 'i', ! 78: MDEV_STARTUP = 's', ! 79: MDEV_EXIT = 'x', ! 80: MDEV_INIT = 'I', ! 81: MDEV_HALT = 'h', ! 82: MDEV_CHPOLL = 'p', ! 83: ! 84: MDEV_MMAP = 'M', /* not defined in SVR4 mdevice (4) */ ! 85: MDEV_SIZE = 'z' /* not defined in SVR4 mdevice (4) */ ! 86: }; ! 87: ! 88: #define MDEV_FUNCS "ocrwisxIhpMz" ! 89: ! 90: enum { ! 91: MDEV_INSTALLABLE = 'i', ! 92: MDEV_CHAR = 'c', ! 93: MDEV_BLOCK = 'b', ! 94: MDEV_STREAM = 'S', ! 95: MDEV_DDI_DDK = 'f', ! 96: MDEV_TTY = 't', ! 97: MDEV_ONE_SDEVICE = 'o', ! 98: MDEV_REQUIRED = 'r', ! 99: MDEV_SAME_MAJORS = 'u', ! 100: MDEV_HARDWARE = 'H', ! 101: MDEV_NO_INT = 'G', ! 102: MDEV_SHARE_DMA = 'D', ! 103: MDEV_MULTIPLE_MAJORS = 'M', ! 104: MDEV_ALLOW_IOA_OVERLAP = 'O', ! 105: ! 106: /* ! 107: * The following flag specifies that we are dealing with an old-style Coherent ! 108: * device driver. These drivers ignore any interrupt settings, doing their ! 109: * work though the mtune/stune system instead, so the 'G' flag also applies. ! 110: * The 'o' flag is also appropriate. ! 111: */ ! 112: ! 113: MDEV_COHERENT = 'C' ! 114: }; ! 115: ! 116: #define MDEV_FLAGS "icbSftoruHGDMOC" ! 117: ! 118: ! 119: EXTERN_C_BEGIN ! 120: ! 121: mdev_t * find_mdev PROTO ((symbol_t * _sym)); ! 122: void for_all_mdevices PROTO ((miter_t _iter, VOID * _extra)); ! 123: int mdev_func PROTO ((mdev_t * _mdevp, char _func)); ! 124: int mdev_flag PROTO ((mdev_t * _mdevp, char _flag)); ! 125: void read_mdev_file PROTO ((CONST char * _inname, ! 126: CONST char * _outname, ! 127: VOID * _extra)); ! 128: void read_mdev_string PROTO ((CONST char * _string, ! 129: VOID * _extra)); ! 130: int mdev_sort PROTO ((mdev_t ** _mlistp, mdev_t ** _mdendp, ! 131: msel_t _selpred, mcmp_t _cmppred, ! 132: size_t _ptroff)); ! 133: void write_mdevice PROTO ((mdev_t * _mdevp, input_t * _input)); ! 134: ! 135: EXTERN_C_END ! 136: ! 137: #endif /* ! defined (MDEV_H) */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.