00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _SYS_DISKSLICE_H_
00030 #define _SYS_DISKSLICE_H_
00031
00032 #ifndef _KERNEL
00033 #include <sys/types.h>
00034 #endif
00035 #include <sys/ioccom.h>
00036
00037 #define BASE_SLICE 2
00038 #define COMPATIBILITY_SLICE 0
00039 #define DIOCGSLICEINFO _IOR('d', 111, struct diskslices)
00040 #define DIOCSYNCSLICEINFO _IOW('d', 112, int)
00041 #define MAX_SLICES 32
00042 #define WHOLE_DISK_SLICE 1
00043
00044 struct diskslice {
00045 u_long ds_offset;
00046 u_long ds_size;
00047 int ds_type;
00048 #ifdef PC98
00049 int ds_subtype;
00050 u_char ds_name[16];
00051 #endif
00052 struct disklabel *ds_label;
00053 void *ds_dev;
00054 #ifdef MAXPARTITIONS
00055 #if MAXPARTITIONS != 8
00056 #error "inconsistent MAXPARTITIONS"
00057 #endif
00058 #else
00059 #define MAXPARTITIONS 8
00060 #endif
00061 void *ds_devs[MAXPARTITIONS];
00062 u_char ds_openmask;
00063 u_char ds_wlabel;
00064 };
00065
00066 struct diskslices {
00067 struct cdevsw *dss_cdevsw;
00068 int dss_first_bsd_slice;
00069 u_int dss_nslices;
00070 u_int dss_oflags;
00071 int dss_secmult;
00072 int dss_secshift;
00073 int dss_secsize;
00074 struct diskslice
00075 dss_slices[MAX_SLICES];
00076 };
00077
00078 #ifdef _KERNEL
00079
00080
00081 #define DSO_NOLABELS 1
00082 #define DSO_ONESLICE 2
00083 #define DSO_COMPATLABEL 4
00084
00085 #define dsgetlabel(dev, ssp) (ssp->dss_slices[dkslice(dev)].ds_label)
00086
00087 struct buf;
00088 struct disklabel;
00089
00090 int dscheck __P((struct buf *bp, struct diskslices *ssp));
00091 void dsclose __P((dev_t dev, int mode, struct diskslices *ssp));
00092 void dsgone __P((struct diskslices **sspp));
00093 int dsinit __P((dev_t dev, struct disklabel *lp,
00094 struct diskslices **sspp));
00095 int dsioctl __P((dev_t dev, u_long cmd, caddr_t data,
00096 int flags, struct diskslices **sspp));
00097 int dsisopen __P((struct diskslices *ssp));
00098 struct diskslices *dsmakeslicestruct __P((int nslices, struct disklabel *lp));
00099 char *dsname __P((dev_t dev, int unit, int slice, int part,
00100 char *partname));
00101 int dsopen __P((dev_t dev, int mode, u_int flags,
00102 struct diskslices **sspp, struct disklabel *lp));
00103 int dssize __P((dev_t dev, struct diskslices **sspp));
00104
00105 #endif
00106
00107 #endif