Print this page
6144 use C99 initializers in segment ops structures


 175                     ulong_t *, size_t);
 176 static int      segdev_getprot(struct seg *, caddr_t, size_t, uint_t *);
 177 static u_offset_t       segdev_getoffset(struct seg *, caddr_t);
 178 static int      segdev_gettype(struct seg *, caddr_t);
 179 static int      segdev_getvp(struct seg *, caddr_t, struct vnode **);
 180 static int      segdev_advise(struct seg *, caddr_t, size_t, uint_t);
 181 static void     segdev_dump(struct seg *);
 182 static int      segdev_pagelock(struct seg *, caddr_t, size_t,
 183                     struct page ***, enum lock_type, enum seg_rw);
 184 static int      segdev_setpagesize(struct seg *, caddr_t, size_t, uint_t);
 185 static int      segdev_getmemid(struct seg *, caddr_t, memid_t *);
 186 static lgrp_mem_policy_info_t   *segdev_getpolicy(struct seg *, caddr_t);
 187 static int      segdev_capable(struct seg *, segcapability_t);
 188 
 189 /*
 190  * XXX  this struct is used by rootnex_map_fault to identify
 191  *      the segment it has been passed. So if you make it
 192  *      "static" you'll need to fix rootnex_map_fault.
 193  */
 194 struct seg_ops segdev_ops = {
 195         segdev_dup,
 196         segdev_unmap,
 197         segdev_free,
 198         segdev_fault,
 199         segdev_faulta,
 200         segdev_setprot,
 201         segdev_checkprot,
 202         (int (*)())segdev_badop,        /* kluster */
 203         (size_t (*)(struct seg *))NULL, /* swapout */
 204         segdev_sync,                    /* sync */
 205         segdev_incore,
 206         segdev_lockop,                  /* lockop */
 207         segdev_getprot,
 208         segdev_getoffset,
 209         segdev_gettype,
 210         segdev_getvp,
 211         segdev_advise,
 212         segdev_dump,
 213         segdev_pagelock,
 214         segdev_setpagesize,
 215         segdev_getmemid,
 216         segdev_getpolicy,
 217         segdev_capable,
 218         seg_inherit_notsup
 219 };
 220 
 221 /*
 222  * Private segdev support routines
 223  */
 224 static struct segdev_data *sdp_alloc(void);
 225 
 226 static void segdev_softunlock(struct hat *, struct seg *, caddr_t,
 227     size_t, enum seg_rw);
 228 
 229 static faultcode_t segdev_faultpage(struct hat *, struct seg *, caddr_t,
 230     struct vpage *, enum fault_type, enum seg_rw, devmap_handle_t *);
 231 
 232 static faultcode_t segdev_faultpages(struct hat *, struct seg *, caddr_t,
 233     size_t, enum fault_type, enum seg_rw, devmap_handle_t *);
 234 
 235 static struct devmap_ctx *devmap_ctxinit(dev_t, ulong_t);
 236 static struct devmap_softlock *devmap_softlock_init(dev_t, ulong_t);
 237 static void devmap_softlock_rele(devmap_handle_t *);
 238 static void devmap_ctx_rele(devmap_handle_t *);




 175                     ulong_t *, size_t);
 176 static int      segdev_getprot(struct seg *, caddr_t, size_t, uint_t *);
 177 static u_offset_t       segdev_getoffset(struct seg *, caddr_t);
 178 static int      segdev_gettype(struct seg *, caddr_t);
 179 static int      segdev_getvp(struct seg *, caddr_t, struct vnode **);
 180 static int      segdev_advise(struct seg *, caddr_t, size_t, uint_t);
 181 static void     segdev_dump(struct seg *);
 182 static int      segdev_pagelock(struct seg *, caddr_t, size_t,
 183                     struct page ***, enum lock_type, enum seg_rw);
 184 static int      segdev_setpagesize(struct seg *, caddr_t, size_t, uint_t);
 185 static int      segdev_getmemid(struct seg *, caddr_t, memid_t *);
 186 static lgrp_mem_policy_info_t   *segdev_getpolicy(struct seg *, caddr_t);
 187 static int      segdev_capable(struct seg *, segcapability_t);
 188 
 189 /*
 190  * XXX  this struct is used by rootnex_map_fault to identify
 191  *      the segment it has been passed. So if you make it
 192  *      "static" you'll need to fix rootnex_map_fault.
 193  */
 194 struct seg_ops segdev_ops = {
 195         .dup            = segdev_dup,
 196         .unmap          = segdev_unmap,
 197         .free           = segdev_free,
 198         .fault          = segdev_fault,
 199         .faulta         = segdev_faulta,
 200         .setprot        = segdev_setprot,
 201         .checkprot      = segdev_checkprot,
 202         .kluster        = (int (*)())segdev_badop,
 203         .sync           = segdev_sync,
 204         .incore         = segdev_incore,
 205         .lockop         = segdev_lockop,
 206         .getprot        = segdev_getprot,
 207         .getoffset      = segdev_getoffset,
 208         .gettype        = segdev_gettype,
 209         .getvp          = segdev_getvp,
 210         .advise         = segdev_advise,
 211         .dump           = segdev_dump,
 212         .pagelock       = segdev_pagelock,
 213         .setpagesize    = segdev_setpagesize,
 214         .getmemid       = segdev_getmemid,
 215         .getpolicy      = segdev_getpolicy,
 216         .capable        = segdev_capable,
 217         .inherit        = seg_inherit_notsup,

 218 };
 219 
 220 /*
 221  * Private segdev support routines
 222  */
 223 static struct segdev_data *sdp_alloc(void);
 224 
 225 static void segdev_softunlock(struct hat *, struct seg *, caddr_t,
 226     size_t, enum seg_rw);
 227 
 228 static faultcode_t segdev_faultpage(struct hat *, struct seg *, caddr_t,
 229     struct vpage *, enum fault_type, enum seg_rw, devmap_handle_t *);
 230 
 231 static faultcode_t segdev_faultpages(struct hat *, struct seg *, caddr_t,
 232     size_t, enum fault_type, enum seg_rw, devmap_handle_t *);
 233 
 234 static struct devmap_ctx *devmap_ctxinit(dev_t, ulong_t);
 235 static struct devmap_softlock *devmap_softlock_init(dev_t, ulong_t);
 236 static void devmap_softlock_rele(devmap_handle_t *);
 237 static void devmap_ctx_rele(devmap_handle_t *);