Lines Matching refs:sdp

362 	struct segdev_data *sdp;  in segdev_create()  local
375 sdp = sdp_alloc(); in segdev_create()
377 sdp->mapfunc = a->mapfunc; in segdev_create()
378 sdp->offset = a->offset; in segdev_create()
379 sdp->prot = a->prot; in segdev_create()
380 sdp->maxprot = a->maxprot; in segdev_create()
381 sdp->type = a->type; in segdev_create()
382 sdp->pageprot = 0; in segdev_create()
383 sdp->softlockcnt = 0; in segdev_create()
384 sdp->vpage = NULL; in segdev_create()
386 if (sdp->mapfunc == NULL) in segdev_create()
387 sdp->devmap_data = dhp; in segdev_create()
389 sdp->devmap_data = dhp = NULL; in segdev_create()
391 sdp->hat_flags = a->hat_flags; in segdev_create()
392 sdp->hat_attr = a->hat_attr; in segdev_create()
397 ASSERT(!(sdp->hat_flags & ~HAT_LOAD_NOCONSIST)); in segdev_create()
404 sdp->vp = specfind(a->dev, VCHR); in segdev_create()
405 ASSERT(sdp->vp != NULL); in segdev_create()
408 seg->s_data = sdp; in segdev_create()
422 error = VOP_ADDMAP(VTOCVP(sdp->vp), sdp->offset, in segdev_create()
424 sdp->prot, sdp->maxprot, sdp->type, CRED(), NULL); in segdev_create()
427 sdp->devmap_data = NULL; in segdev_create()
447 struct segdev_data *sdp; in sdp_alloc() local
449 sdp = kmem_zalloc(sizeof (struct segdev_data), KM_SLEEP); in sdp_alloc()
450 rw_init(&sdp->lock, NULL, RW_DEFAULT, NULL); in sdp_alloc()
452 return (sdp); in sdp_alloc()
461 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_dup() local
463 devmap_handle_t *dhp = (devmap_handle_t *)sdp->devmap_data; in segdev_dup()
484 VN_HOLD(sdp->vp); in segdev_dup()
485 newsdp->vp = sdp->vp; in segdev_dup()
486 newsdp->mapfunc = sdp->mapfunc; in segdev_dup()
487 newsdp->offset = sdp->offset; in segdev_dup()
488 newsdp->pageprot = sdp->pageprot; in segdev_dup()
489 newsdp->prot = sdp->prot; in segdev_dup()
490 newsdp->maxprot = sdp->maxprot; in segdev_dup()
491 newsdp->type = sdp->type; in segdev_dup()
492 newsdp->hat_attr = sdp->hat_attr; in segdev_dup()
493 newsdp->hat_flags = sdp->hat_flags; in segdev_dup()
502 if (sdp->vpage != NULL) { in segdev_dup()
506 bcopy(sdp->vpage, newsdp->vpage, nbytes); in segdev_dup()
533 newsdp->maxprot, sdp->type, CRED(), NULL)); in segdev_dup()
622 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_unmap() local
629 devmap_handle_t *dhp = (devmap_handle_t *)sdp->devmap_data; in segdev_unmap()
651 if ((sz = sdp->softlockcnt) > 0) { in segdev_unmap()
711 off = sdp->offset + (offset_t)(addr - seg->s_base); in segdev_unmap()
716 ASSERT(sdp->vp != NULL); in segdev_unmap()
717 (void) VOP_DELMAP(VTOCVP(sdp->vp), off, seg->s_as, addr, len, in segdev_unmap()
718 sdp->prot, sdp->maxprot, sdp->type, CRED(), NULL); in segdev_unmap()
736 if (sdp->vpage != NULL) { in segdev_unmap()
739 ovpage = sdp->vpage; /* keep pointer to vpage */ in segdev_unmap()
742 sdp->vpage = kmem_alloc(nbytes, KM_SLEEP); in segdev_unmap()
743 bcopy(&ovpage[dpages], sdp->vpage, nbytes); in segdev_unmap()
755 sdp->offset += (offset_t)len; in segdev_unmap()
767 if (sdp->vpage != NULL) { in segdev_unmap()
770 ovpage = sdp->vpage; /* keep pointer to vpage */ in segdev_unmap()
773 sdp->vpage = kmem_alloc(nbytes, KM_SLEEP); in segdev_unmap()
774 bcopy(ovpage, sdp->vpage, nbytes); in segdev_unmap()
811 VN_HOLD(sdp->vp); in segdev_unmap()
812 nsdp->mapfunc = sdp->mapfunc; in segdev_unmap()
813 nsdp->offset = sdp->offset + (offset_t)(nseg->s_base - seg->s_base); in segdev_unmap()
814 nsdp->vp = sdp->vp; in segdev_unmap()
815 nsdp->pageprot = sdp->pageprot; in segdev_unmap()
816 nsdp->prot = sdp->prot; in segdev_unmap()
817 nsdp->maxprot = sdp->maxprot; in segdev_unmap()
818 nsdp->type = sdp->type; in segdev_unmap()
819 nsdp->hat_attr = sdp->hat_attr; in segdev_unmap()
820 nsdp->hat_flags = sdp->hat_flags; in segdev_unmap()
827 if (sdp->vpage != NULL) { in segdev_unmap()
833 ovpage = sdp->vpage; /* keep pointer to vpage */ in segdev_unmap()
840 sdp->vpage = kmem_alloc(nbytes, KM_SLEEP); in segdev_unmap()
841 bcopy(ovpage, sdp->vpage, nbytes); in segdev_unmap()
1006 struct segdev_data *sdp = (struct segdev_data *)dhp->dh_seg->s_data; in devmap_handle_unmap() local
1007 devmap_handle_t *dhpp = (devmap_handle_t *)sdp->devmap_data; in devmap_handle_unmap()
1021 sdp->devmap_data = dhp->dh_next; in devmap_handle_unmap()
1083 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in devmap_handle_unmap_tail() local
1084 register devmap_handle_t *dhph = (devmap_handle_t *)sdp->devmap_data; in devmap_handle_unmap_tail()
1100 off = (ulong_t)sdp->offset + (addr - seg->s_base); in devmap_handle_unmap_tail()
1126 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_free() local
1127 devmap_handle_t *dhp = (devmap_handle_t *)sdp->devmap_data; in segdev_free()
1143 VN_RELE(sdp->vp); in segdev_free()
1144 if (sdp->vpage != NULL) in segdev_free()
1145 kmem_free(sdp->vpage, vpgtob(seg_pages(seg))); in segdev_free()
1147 rw_destroy(&sdp->lock); in segdev_free()
1148 kmem_free(sdp, sizeof (*sdp)); in segdev_free()
1328 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_softunlock() local
1329 devmap_handle_t *dhp_head = (devmap_handle_t *)sdp->devmap_data; in segdev_softunlock()
1333 dhp_head, sdp, addr, len); in segdev_softunlock()
1336 (void *)dhp_head, sdp->softlockcnt, (void *)addr, len)); in segdev_softunlock()
1377 ASSERT(sdp->softlockcnt >= btopr(len)); in segdev_softunlock()
1378 sdp->softlockcnt -= btopr(len); in segdev_softunlock()
1380 if (sdp->softlockcnt == 0) { in segdev_softunlock()
1416 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_faultpage() local
1432 if (sdp->pageprot) { in segdev_faultpage()
1455 prot = sdp->prot; in segdev_faultpage()
1461 sdp->softlockcnt++; in segdev_faultpage()
1466 offset = sdp->offset + (u_offset_t)(addr - seg->s_base); in segdev_faultpage()
1474 ASSERT(sdp->devmap_data == NULL); in segdev_faultpage()
1475 pfnum = (pfn_t)cdev_mmap(sdp->mapfunc, sdp->vp->v_rdev, in segdev_faultpage()
1477 prot |= sdp->hat_attr; in segdev_faultpage()
1485 (devmap_handle_t *)sdp->devmap_data, addr)); in segdev_faultpage()
1566 prot, hat_flags | sdp->hat_flags); in segdev_faultpage()
1575 dip = VTOS(VTOCVP(sdp->vp))->s_dip; in segdev_faultpage()
1603 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_fault() local
1604 devmap_handle_t *dhp_head = (devmap_handle_t *)sdp->devmap_data; in segdev_fault()
1734 if ((sdp->pageprot == 0) && in segdev_fault()
1797 if ((sdp->pageprot == 0) && in segdev_fault()
1810 aoff = sdp->offset + (offset_t)(laddr - seg->s_base); in segdev_fault()
1909 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_faultpages() local
1955 rw_enter(&sdp->lock, RW_READER); in segdev_faultpages()
1956 if (sdp->pageprot == 0) { in segdev_faultpages()
1975 if ((sdp->prot & protchk) == 0) { in segdev_faultpages()
1976 rw_exit(&sdp->lock); in segdev_faultpages()
1991 if ((sdp->pageprot == 0) && (dhp != NULL) && dhp_is_devmem(dhp)) { in segdev_faultpages()
1996 rw_exit(&sdp->lock); in segdev_faultpages()
2002 sdp->softlockcnt += btopr(len); in segdev_faultpages()
2010 hat_devload(hat, addr, len, pfnum, sdp->prot | dhp->dh_hat_attr, in segdev_faultpages()
2011 hat_flags | sdp->hat_flags); in segdev_faultpages()
2012 rw_exit(&sdp->lock); in segdev_faultpages()
2018 if (sdp->vpage == NULL) in segdev_faultpages()
2021 vpage = &sdp->vpage[seg_page(seg, addr)]; in segdev_faultpages()
2031 rw_exit(&sdp->lock); in segdev_faultpages()
2068 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_setprot() local
2071 devmap_handle_t *dhp_head = (devmap_handle_t *)sdp->devmap_data; in segdev_setprot()
2080 if ((sz = sdp->softlockcnt) > 0 && dhp_head != NULL) { in segdev_setprot()
2113 if ((sdp->maxprot & prot) != prot) in segdev_setprot()
2117 rw_enter(&sdp->lock, RW_WRITER); in segdev_setprot()
2118 if (addr == seg->s_base && len == seg->s_size && sdp->pageprot == 0) { in segdev_setprot()
2119 if (sdp->prot == prot) { in segdev_setprot()
2120 rw_exit(&sdp->lock); in segdev_setprot()
2123 sdp->prot = (uchar_t)prot; in segdev_setprot()
2125 sdp->pageprot = 1; in segdev_setprot()
2126 if (sdp->vpage == NULL) { in segdev_setprot()
2131 sdp->vpage = kmem_zalloc(vpgtob(seg_pages(seg)), in segdev_setprot()
2133 evp = &sdp->vpage[seg_pages(seg)]; in segdev_setprot()
2134 for (vp = sdp->vpage; vp < evp; vp++) in segdev_setprot()
2135 VPP_SETPROT(vp, sdp->prot); in segdev_setprot()
2140 evp = &sdp->vpage[seg_page(seg, addr + len)]; in segdev_setprot()
2141 for (vp = &sdp->vpage[seg_page(seg, addr)]; vp < evp; vp++) in segdev_setprot()
2144 rw_exit(&sdp->lock); in segdev_setprot()
2195 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_checkprot() local
2206 rw_enter(&sdp->lock, RW_READER); in segdev_checkprot()
2207 if (sdp->pageprot == 0) { in segdev_checkprot()
2210 err = ((sdp->prot & prot) != prot) ? EACCES : 0; in segdev_checkprot()
2211 rw_exit(&sdp->lock); in segdev_checkprot()
2218 evp = &sdp->vpage[seg_page(seg, addr + len)]; in segdev_checkprot()
2219 for (vp = &sdp->vpage[seg_page(seg, addr)]; vp < evp; vp++) { in segdev_checkprot()
2221 rw_exit(&sdp->lock); in segdev_checkprot()
2225 rw_exit(&sdp->lock); in segdev_checkprot()
2232 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getprot() local
2242 rw_enter(&sdp->lock, RW_READER); in segdev_getprot()
2243 if (sdp->pageprot == 0) { in segdev_getprot()
2245 protv[--pgno] = sdp->prot; in segdev_getprot()
2253 VPP_PROT(&sdp->vpage[pgno + pgoff]); in segdev_getprot()
2256 rw_exit(&sdp->lock); in segdev_getprot()
2264 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getoffset() local
2271 return ((u_offset_t)sdp->offset + (addr - seg->s_base)); in segdev_getoffset()
2278 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_gettype() local
2285 return (sdp->type); in segdev_gettype()
2293 register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getvp() local
2304 *vpp = VTOCVP(sdp->vp); in segdev_getvp()
3283 struct segdev_data *sdp; in devmap_setup() local
3302 sdp = dhp_head->dh_seg->s_data; in devmap_setup()
3303 sdp->devmap_data = NULL; in devmap_setup()
4023 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_getmemid() local
4030 memidp->val[0] = (uintptr_t)VTOCVP(sdp->vp); in segdev_getmemid()
4031 memidp->val[1] = sdp->offset + (uintptr_t)(addr - seg->s_base); in segdev_getmemid()
4086 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_copyfrom() local
4087 struct snode *sp = VTOS(VTOCVP(sdp->vp)); in segdev_copyfrom()
4097 struct segdev_data *sdp = (struct segdev_data *)seg->s_data; in segdev_copyto() local
4098 struct snode *sp = VTOS(VTOCVP(sdp->vp)); in segdev_copyto()