Lines Matching +full:offset +full:- +full:y
32 #include <dix-config.h>
61 #include "protocol-versions.h"
64 /* Needed for Solaris cross-zone shared memory extension */
72 #define SHMPERM_UID(p) p->ipcx_uid
73 #define SHMPERM_CUID(p) p->ipcx_cuid
74 #define SHMPERM_GID(p) p->ipcx_gid
75 #define SHMPERM_CGID(p) p->ipcx_cgid
76 #define SHMPERM_MODE(p) p->ipcx_mode
77 #define SHMPERM_ZONEID(p) p->ipcx_zoneid
84 #define SHMPERM_UID(p) p->uid
85 #define SHMPERM_CUID(p) p->cuid
86 #define SHMPERM_GID(p) p->gid
87 #define SHMPERM_CGID(p) p->cgid
88 #define SHMPERM_MODE(p) p->mode
127 #define ShmGetScreenPriv(s) ((ShmScrPrivateRec *)dixLookupPrivate(&(s)->devPrivates, shmScrPrivateK…
138 #define VERIFY_SHMPTR(shmseg,offset,needwrite,shmdesc,client) \ argument
141 if ((offset & 3) || (offset > shmdesc->size)) \
143 client->errorValue = offset; \
146 if (needwrite && !shmdesc->writable) \
150 #define VERIFY_SHMSIZE(shmdesc,offset,len,client) \ argument
152 if ((offset + len) > shmdesc->size) \
172 int shmid = -1; in CheckForShmSyscall()
180 if (shmid != -1) { in CheckForShmSyscall()
181 /* Successful allocation - clean up */ in CheckForShmSyscall()
201 pScreen->CloseScreen = screen_priv->CloseScreen; in ShmCloseScreen()
202 dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, NULL); in ShmCloseScreen()
205 if (!pScreen->CloseScreen) in ShmCloseScreen()
208 return (*pScreen->CloseScreen) (pScreen); in ShmCloseScreen()
218 screen_priv->CloseScreen = pScreen->CloseScreen; in ShmInitScreenPriv()
219 dixSetPrivate(&pScreen->devPrivates, shmScrPrivateKey, screen_priv); in ShmInitScreenPriv()
220 pScreen->CloseScreen = ShmCloseScreen; in ShmInitScreenPriv()
249 ShmInitScreenPriv(pScreen)->shmFuncs = funcs; in ShmRegisterFuncs()
255 ScreenPtr pScreen = pPixmap->drawable.pScreen; in ShmDestroyPixmap()
260 if (pPixmap->refcnt == 1) in ShmDestroyPixmap()
261 shmdesc = dixLookupPrivate(&pPixmap->devPrivates, shmPixmapPrivateKey); in ShmDestroyPixmap()
263 pScreen->DestroyPixmap = screen_priv->destroyPixmap; in ShmDestroyPixmap()
264 ret = (*pScreen->DestroyPixmap) (pPixmap); in ShmDestroyPixmap()
265 screen_priv->destroyPixmap = pScreen->DestroyPixmap; in ShmDestroyPixmap()
266 pScreen->DestroyPixmap = ShmDestroyPixmap; in ShmDestroyPixmap()
286 .sequenceNumber = client->sequence, in ProcShmQueryVersion()
297 if (client->swapped) { in ProcShmQueryVersion()
321 if (GetLocalClientCreds(client, &lcc) != -1) { in shm_access()
323 if (lcc->fieldsSet & LCC_UID_SET) { in shm_access()
324 uid = lcc->euid; in shm_access()
327 if (lcc->fieldsSet & LCC_GID_SET) { in shm_access()
328 gid = lcc->egid; in shm_access()
333 if (((lcc->fieldsSet & LCC_ZID_SET) == 0) || (lcc->zoneid == -1) in shm_access()
334 || (lcc->zoneid != SHMPERM_ZONEID(perm))) { in shm_access()
352 return (SHMPERM_MODE(perm) & mask) == mask ? 0 : -1; in shm_access()
363 return (SHMPERM_MODE(perm) & mask) == mask ? 0 : -1; in shm_access()
372 return (SHMPERM_MODE(perm) & mask) == mask ? 0 : -1; in shm_access()
384 LEGAL_NEW_RESOURCE(stuff->shmseg, client); in ProcShmAttach()
385 if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) { in ProcShmAttach()
386 client->errorValue = stuff->readOnly; in ProcShmAttach()
389 for (shmdesc = Shmsegs; shmdesc; shmdesc = shmdesc->next) { in ProcShmAttach()
390 if (!SHMDESC_IS_FD(shmdesc) && shmdesc->shmid == stuff->shmid) in ProcShmAttach()
394 if (!stuff->readOnly && !shmdesc->writable) in ProcShmAttach()
396 shmdesc->refcnt++; in ProcShmAttach()
403 shmdesc->is_fd = FALSE; in ProcShmAttach()
405 shmdesc->addr = shmat(stuff->shmid, 0, in ProcShmAttach()
406 stuff->readOnly ? SHM_RDONLY : 0); in ProcShmAttach()
407 if ((shmdesc->addr == ((char *) -1)) || SHMSTAT(stuff->shmid, &buf)) { in ProcShmAttach()
416 if (shm_access(client, &(SHM_PERM(buf)), stuff->readOnly) == -1) { in ProcShmAttach()
417 shmdt(shmdesc->addr); in ProcShmAttach()
422 shmdesc->shmid = stuff->shmid; in ProcShmAttach()
423 shmdesc->refcnt = 1; in ProcShmAttach()
424 shmdesc->writable = !stuff->readOnly; in ProcShmAttach()
425 shmdesc->size = SHM_SEGSZ(buf); in ProcShmAttach()
426 shmdesc->next = Shmsegs; in ProcShmAttach()
429 if (!AddResource(stuff->shmseg, ShmSegType, (void *) shmdesc)) in ProcShmAttach()
441 if (--shmdesc->refcnt) in ShmDetachSegment()
444 if (shmdesc->is_fd) { in ShmDetachSegment()
445 if (shmdesc->busfault) in ShmDetachSegment()
446 busfault_unregister(shmdesc->busfault); in ShmDetachSegment()
447 munmap(shmdesc->addr, shmdesc->size); in ShmDetachSegment()
450 shmdt(shmdesc->addr); in ShmDetachSegment()
451 for (prev = &Shmsegs; *prev != shmdesc; prev = &(*prev)->next); in ShmDetachSegment()
452 *prev = shmdesc->next; in ShmDetachSegment()
465 VERIFY_SHMSEG(stuff->shmseg, shmdesc, client); in ProcShmDetach()
466 FreeResource(stuff->shmseg, RT_NONE); in ProcShmDetach()
483 pPixmap = GetScratchPixmapHeader(dst->pScreen, w, h, depth, in doShmPutImage()
488 pGC->ops->CopyArea((DrawablePtr) pPixmap, dst, pGC, sx, sy, sw, sh, dx, in doShmPutImage()
493 GCPtr putGC = GetScratchGC(depth, dst->pScreen); in doShmPutImage()
498 pPixmap = (*dst->pScreen->CreatePixmap) (dst->pScreen, sw, sh, depth, in doShmPutImage()
504 ValidateGC(&pPixmap->drawable, putGC); in doShmPutImage()
505 (*putGC->ops->PutImage) (&pPixmap->drawable, putGC, depth, -sx, -sy, w, in doShmPutImage()
511 (void) (*pGC->ops->CopyPlane) (&pPixmap->drawable, dst, pGC, 0, 0, in doShmPutImage()
514 (void) (*pGC->ops->CopyArea) (&pPixmap->drawable, dst, pGC, 0, 0, in doShmPutImage()
516 (*pPixmap->drawable.pScreen->DestroyPixmap) (pPixmap); in doShmPutImage()
531 VALIDATE_DRAWABLE_AND_GC(stuff->drawable, pDraw, DixWriteAccess); in ProcShmPutImage()
532 VERIFY_SHMPTR(stuff->shmseg, stuff->offset, FALSE, shmdesc, client); in ProcShmPutImage()
533 if ((stuff->sendEvent != xTrue) && (stuff->sendEvent != xFalse)) in ProcShmPutImage()
535 if (stuff->format == XYBitmap) { in ProcShmPutImage()
536 if (stuff->depth != 1) in ProcShmPutImage()
538 length = PixmapBytePad(stuff->totalWidth, 1); in ProcShmPutImage()
540 else if (stuff->format == XYPixmap) { in ProcShmPutImage()
541 if (pDraw->depth != stuff->depth) in ProcShmPutImage()
543 length = PixmapBytePad(stuff->totalWidth, 1); in ProcShmPutImage()
544 length *= stuff->depth; in ProcShmPutImage()
546 else if (stuff->format == ZPixmap) { in ProcShmPutImage()
547 if (pDraw->depth != stuff->depth) in ProcShmPutImage()
549 length = PixmapBytePad(stuff->totalWidth, stuff->depth); in ProcShmPutImage()
552 client->errorValue = stuff->format; in ProcShmPutImage()
558 * VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight, in ProcShmPutImage()
562 if (stuff->totalHeight != 0 && in ProcShmPutImage()
563 length > (shmdesc->size - stuff->offset) / stuff->totalHeight) { in ProcShmPutImage()
564 client->errorValue = stuff->totalWidth; in ProcShmPutImage()
567 if (stuff->srcX > stuff->totalWidth) { in ProcShmPutImage()
568 client->errorValue = stuff->srcX; in ProcShmPutImage()
571 if (stuff->srcY > stuff->totalHeight) { in ProcShmPutImage()
572 client->errorValue = stuff->srcY; in ProcShmPutImage()
575 if ((stuff->srcX + stuff->srcWidth) > stuff->totalWidth) { in ProcShmPutImage()
576 client->errorValue = stuff->srcWidth; in ProcShmPutImage()
579 if ((stuff->srcY + stuff->srcHeight) > stuff->totalHeight) { in ProcShmPutImage()
580 client->errorValue = stuff->srcHeight; in ProcShmPutImage()
584 if ((((stuff->format == ZPixmap) && (stuff->srcX == 0)) || in ProcShmPutImage()
585 ((stuff->format != ZPixmap) && in ProcShmPutImage()
586 (stuff->srcX < screenInfo.bitmapScanlinePad) && in ProcShmPutImage()
587 ((stuff->format == XYBitmap) || in ProcShmPutImage()
588 ((stuff->srcY == 0) && in ProcShmPutImage()
589 (stuff->srcHeight == stuff->totalHeight))))) && in ProcShmPutImage()
590 ((stuff->srcX + stuff->srcWidth) == stuff->totalWidth)) in ProcShmPutImage()
591 (*pGC->ops->PutImage) (pDraw, pGC, stuff->depth, in ProcShmPutImage()
592 stuff->dstX, stuff->dstY, in ProcShmPutImage()
593 stuff->totalWidth, stuff->srcHeight, in ProcShmPutImage()
594 stuff->srcX, stuff->format, in ProcShmPutImage()
595 shmdesc->addr + stuff->offset + in ProcShmPutImage()
596 (stuff->srcY * length)); in ProcShmPutImage()
598 doShmPutImage(pDraw, pGC, stuff->depth, stuff->format, in ProcShmPutImage()
599 stuff->totalWidth, stuff->totalHeight, in ProcShmPutImage()
600 stuff->srcX, stuff->srcY, in ProcShmPutImage()
601 stuff->srcWidth, stuff->srcHeight, in ProcShmPutImage()
602 stuff->dstX, stuff->dstY, shmdesc->addr + stuff->offset); in ProcShmPutImage()
604 if (stuff->sendEvent) { in ProcShmPutImage()
607 .drawable = stuff->drawable, in ProcShmPutImage()
610 .shmseg = stuff->shmseg, in ProcShmPutImage()
611 .offset = stuff->offset in ProcShmPutImage()
634 if ((stuff->format != XYPixmap) && (stuff->format != ZPixmap)) { in ProcShmGetImage()
635 client->errorValue = stuff->format; in ProcShmGetImage()
638 rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixReadAccess); in ProcShmGetImage()
641 VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); in ProcShmGetImage()
642 if (pDraw->type == DRAWABLE_WINDOW) { in ProcShmGetImage()
644 !((WindowPtr) pDraw)->realized || in ProcShmGetImage()
646 pDraw->x + stuff->x < 0 || in ProcShmGetImage()
647 pDraw->x + stuff->x + (int) stuff->width > pDraw->pScreen->width in ProcShmGetImage()
648 || pDraw->y + stuff->y < 0 || in ProcShmGetImage()
649 pDraw->y + stuff->y + (int) stuff->height > in ProcShmGetImage()
650 pDraw->pScreen->height || in ProcShmGetImage()
652 stuff->x < -wBorderWidth((WindowPtr) pDraw) || in ProcShmGetImage()
653 stuff->x + (int) stuff->width > in ProcShmGetImage()
654 wBorderWidth((WindowPtr) pDraw) + (int) pDraw->width || in ProcShmGetImage()
655 stuff->y < -wBorderWidth((WindowPtr) pDraw) || in ProcShmGetImage()
656 stuff->y + (int) stuff->height > in ProcShmGetImage()
657 wBorderWidth((WindowPtr) pDraw) + (int) pDraw->height) in ProcShmGetImage()
660 if (pDraw->type == DRAWABLE_WINDOW) in ProcShmGetImage()
661 pVisibleRegion = &((WindowPtr) pDraw)->borderClip; in ProcShmGetImage()
662 pDraw->pScreen->SourceValidate(pDraw, stuff->x, stuff->y, in ProcShmGetImage()
663 stuff->width, stuff->height, in ProcShmGetImage()
667 if (stuff->x < 0 || in ProcShmGetImage()
668 stuff->x + (int) stuff->width > pDraw->width || in ProcShmGetImage()
669 stuff->y < 0 || stuff->y + (int) stuff->height > pDraw->height) in ProcShmGetImage()
675 .sequenceNumber = client->sequence, in ProcShmGetImage()
678 .depth = pDraw->depth in ProcShmGetImage()
680 if (stuff->format == ZPixmap) { in ProcShmGetImage()
681 length = PixmapBytePad(stuff->width, pDraw->depth) * stuff->height; in ProcShmGetImage()
684 lenPer = PixmapBytePad(stuff->width, 1) * stuff->height; in ProcShmGetImage()
685 plane = ((Mask) 1) << (pDraw->depth - 1); in ProcShmGetImage()
687 length = lenPer * Ones(stuff->planeMask & (plane | (plane - 1))); in ProcShmGetImage()
690 VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client); in ProcShmGetImage()
696 else if (stuff->format == ZPixmap) { in ProcShmGetImage()
697 (*pDraw->pScreen->GetImage) (pDraw, stuff->x, stuff->y, in ProcShmGetImage()
698 stuff->width, stuff->height, in ProcShmGetImage()
699 stuff->format, stuff->planeMask, in ProcShmGetImage()
700 shmdesc->addr + stuff->offset); in ProcShmGetImage()
703 PixmapBytePad(stuff->width, pDraw->depth), pDraw, in ProcShmGetImage()
704 stuff->x, stuff->y, stuff->width, stuff->height, in ProcShmGetImage()
705 stuff->format, shmdesc->addr + stuff->offset); in ProcShmGetImage()
709 length = stuff->offset; in ProcShmGetImage()
711 if (stuff->planeMask & plane) { in ProcShmGetImage()
712 (*pDraw->pScreen->GetImage) (pDraw, in ProcShmGetImage()
713 stuff->x, stuff->y, in ProcShmGetImage()
714 stuff->width, stuff->height, in ProcShmGetImage()
715 stuff->format, plane, in ProcShmGetImage()
716 shmdesc->addr + length); in ProcShmGetImage()
719 BitmapBytePad(stuff->width), pDraw, in ProcShmGetImage()
720 stuff->x, stuff->y, stuff->width, stuff->height, in ProcShmGetImage()
721 stuff->format, shmdesc->addr + length); in ProcShmGetImage()
727 if (client->swapped) { in ProcShmGetImage()
749 result = dixLookupResourceByClass((void **) &draw, stuff->drawable, in ProcPanoramiXShmPutImage()
754 result = dixLookupResourceByType((void **) &gc, stuff->gc, in ProcPanoramiXShmPutImage()
759 isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; in ProcPanoramiXShmPutImage()
761 orig_x = stuff->dstX; in ProcPanoramiXShmPutImage()
762 orig_y = stuff->dstY; in ProcPanoramiXShmPutImage()
763 sendEvent = stuff->sendEvent; in ProcPanoramiXShmPutImage()
764 stuff->sendEvent = 0; in ProcPanoramiXShmPutImage()
767 stuff->sendEvent = sendEvent; in ProcPanoramiXShmPutImage()
768 stuff->drawable = draw->info[j].id; in ProcPanoramiXShmPutImage()
769 stuff->gc = gc->info[j].id; in ProcPanoramiXShmPutImage()
771 stuff->dstX = orig_x - screenInfo.screens[j]->x; in ProcPanoramiXShmPutImage()
772 stuff->dstY = orig_y - screenInfo.screens[j]->y; in ProcPanoramiXShmPutImage()
789 int i, x, y, w, h, format, rc; in ProcPanoramiXShmGetImage() local
798 if ((stuff->format != XYPixmap) && (stuff->format != ZPixmap)) { in ProcPanoramiXShmGetImage()
799 client->errorValue = stuff->format; in ProcPanoramiXShmGetImage()
803 rc = dixLookupResourceByClass((void **) &draw, stuff->drawable, in ProcPanoramiXShmGetImage()
808 if (draw->type == XRT_PIXMAP) in ProcPanoramiXShmGetImage()
811 rc = dixLookupDrawable(&pDraw, stuff->drawable, client, 0, DixReadAccess); in ProcPanoramiXShmGetImage()
815 VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); in ProcPanoramiXShmGetImage()
817 x = stuff->x; in ProcPanoramiXShmGetImage()
818 y = stuff->y; in ProcPanoramiXShmGetImage()
819 w = stuff->width; in ProcPanoramiXShmGetImage()
820 h = stuff->height; in ProcPanoramiXShmGetImage()
821 format = stuff->format; in ProcPanoramiXShmGetImage()
822 planemask = stuff->planeMask; in ProcPanoramiXShmGetImage()
824 isRoot = (draw->type == XRT_WINDOW) && draw->u.win.root; in ProcPanoramiXShmGetImage()
829 y < 0 || y + h > PanoramiXPixHeight) in ProcPanoramiXShmGetImage()
834 screenInfo.screens[0]->x + pDraw->x + x < 0 || in ProcPanoramiXShmGetImage()
835 screenInfo.screens[0]->x + pDraw->x + x + w > PanoramiXPixWidth in ProcPanoramiXShmGetImage()
836 || screenInfo.screens[0]->y + pDraw->y + y < 0 || in ProcPanoramiXShmGetImage()
837 screenInfo.screens[0]->y + pDraw->y + y + h > PanoramiXPixHeight in ProcPanoramiXShmGetImage()
840 x < -wBorderWidth((WindowPtr) pDraw) || in ProcPanoramiXShmGetImage()
841 x + w > wBorderWidth((WindowPtr) pDraw) + (int) pDraw->width || in ProcPanoramiXShmGetImage()
842 y < -wBorderWidth((WindowPtr) pDraw) || in ProcPanoramiXShmGetImage()
843 y + h > wBorderWidth((WindowPtr) pDraw) + (int) pDraw->height) in ProcPanoramiXShmGetImage()
848 widthBytesLine = PixmapBytePad(w, pDraw->depth); in ProcPanoramiXShmGetImage()
854 plane = ((Mask) 1) << (pDraw->depth - 1); in ProcPanoramiXShmGetImage()
855 length = lenPer * Ones(planemask & (plane | (plane - 1))); in ProcPanoramiXShmGetImage()
858 VERIFY_SHMSIZE(shmdesc, stuff->offset, length, client); in ProcPanoramiXShmGetImage()
866 rc = dixLookupDrawable(drawables + i, draw->info[i].id, client, 0, in ProcPanoramiXShmGetImage()
874 drawables[i]->pScreen->SourceValidate(drawables[i], 0, 0, in ProcPanoramiXShmGetImage()
875 drawables[i]->width, in ProcPanoramiXShmGetImage()
876 drawables[i]->height, in ProcPanoramiXShmGetImage()
882 .sequenceNumber = client->sequence, in ProcPanoramiXShmGetImage()
885 .depth = pDraw->depth in ProcPanoramiXShmGetImage()
893 XineramaGetImageData(drawables, x, y, w, h, format, planemask, in ProcPanoramiXShmGetImage()
894 shmdesc->addr + stuff->offset, in ProcPanoramiXShmGetImage()
899 length = stuff->offset; in ProcPanoramiXShmGetImage()
902 XineramaGetImageData(drawables, x, y, w, h, in ProcPanoramiXShmGetImage()
903 format, plane, shmdesc->addr + length, in ProcPanoramiXShmGetImage()
911 if (client->swapped) { in ProcPanoramiXShmGetImage()
938 client->errorValue = stuff->pid; in ProcPanoramiXShmCreatePixmap()
941 LEGAL_NEW_RESOURCE(stuff->pid, client); in ProcPanoramiXShmCreatePixmap()
942 rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY, in ProcPanoramiXShmCreatePixmap()
947 VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); in ProcPanoramiXShmCreatePixmap()
949 width = stuff->width; in ProcPanoramiXShmCreatePixmap()
950 height = stuff->height; in ProcPanoramiXShmCreatePixmap()
951 depth = stuff->depth; in ProcPanoramiXShmCreatePixmap()
953 client->errorValue = 0; in ProcPanoramiXShmCreatePixmap()
959 if (stuff->depth != 1) { in ProcPanoramiXShmCreatePixmap()
960 pDepth = pDraw->pScreen->allowedDepths; in ProcPanoramiXShmCreatePixmap()
961 for (i = 0; i < pDraw->pScreen->numDepths; i++, pDepth++) in ProcPanoramiXShmCreatePixmap()
962 if (pDepth->depth == stuff->depth) in ProcPanoramiXShmCreatePixmap()
964 client->errorValue = stuff->depth; in ProcPanoramiXShmCreatePixmap()
974 /* thankfully, offset is unsigned */ in ProcPanoramiXShmCreatePixmap()
975 if (stuff->offset + size < size) in ProcPanoramiXShmCreatePixmap()
978 VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client); in ProcPanoramiXShmCreatePixmap()
983 newPix->type = XRT_PIXMAP; in ProcPanoramiXShmCreatePixmap()
984 newPix->u.pix.shared = TRUE; in ProcPanoramiXShmCreatePixmap()
985 panoramix_setup_ids(newPix, client, stuff->pid); in ProcPanoramiXShmCreatePixmap()
995 pMap = (*screen_priv->shmFuncs->CreatePixmap) (pScreen, in ProcPanoramiXShmCreatePixmap()
996 stuff->width, in ProcPanoramiXShmCreatePixmap()
997 stuff->height, in ProcPanoramiXShmCreatePixmap()
998 stuff->depth, in ProcPanoramiXShmCreatePixmap()
999 shmdesc->addr + in ProcPanoramiXShmCreatePixmap()
1000 stuff->offset); in ProcPanoramiXShmCreatePixmap()
1003 result = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->pid, in ProcPanoramiXShmCreatePixmap()
1006 pDraw->pScreen->DestroyPixmap(pMap); in ProcPanoramiXShmCreatePixmap()
1009 dixSetPrivate(&pMap->devPrivates, shmPixmapPrivateKey, shmdesc); in ProcPanoramiXShmCreatePixmap()
1010 shmdesc->refcnt++; in ProcPanoramiXShmCreatePixmap()
1011 pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER; in ProcPanoramiXShmCreatePixmap()
1012 pMap->drawable.id = newPix->info[j].id; in ProcPanoramiXShmCreatePixmap()
1013 if (!AddResource(newPix->info[j].id, RT_PIXMAP, (void *) pMap)) { in ProcPanoramiXShmCreatePixmap()
1025 while (j--) in ProcPanoramiXShmCreatePixmap()
1026 FreeResource(newPix->info[j].id, RT_NONE); in ProcPanoramiXShmCreatePixmap()
1030 AddResource(stuff->pid, XRT_PIXMAP, newPix); in ProcPanoramiXShmCreatePixmap()
1042 pPixmap = (*pScreen->CreatePixmap) (pScreen, 0, 0, pScreen->rootDepth, 0); in fbShmCreatePixmap()
1046 if (!(*pScreen->ModifyPixmapHeader) (pPixmap, width, height, depth, in fbShmCreatePixmap()
1050 (*pScreen->DestroyPixmap) (pPixmap); in fbShmCreatePixmap()
1071 client->errorValue = stuff->pid; in ProcShmCreatePixmap()
1074 LEGAL_NEW_RESOURCE(stuff->pid, client); in ProcShmCreatePixmap()
1075 rc = dixLookupDrawable(&pDraw, stuff->drawable, client, M_ANY, in ProcShmCreatePixmap()
1080 VERIFY_SHMPTR(stuff->shmseg, stuff->offset, TRUE, shmdesc, client); in ProcShmCreatePixmap()
1082 width = stuff->width; in ProcShmCreatePixmap()
1083 height = stuff->height; in ProcShmCreatePixmap()
1084 depth = stuff->depth; in ProcShmCreatePixmap()
1086 client->errorValue = 0; in ProcShmCreatePixmap()
1092 if (stuff->depth != 1) { in ProcShmCreatePixmap()
1093 pDepth = pDraw->pScreen->allowedDepths; in ProcShmCreatePixmap()
1094 for (i = 0; i < pDraw->pScreen->numDepths; i++, pDepth++) in ProcShmCreatePixmap()
1095 if (pDepth->depth == stuff->depth) in ProcShmCreatePixmap()
1097 client->errorValue = stuff->depth; in ProcShmCreatePixmap()
1107 /* thankfully, offset is unsigned */ in ProcShmCreatePixmap()
1108 if (stuff->offset + size < size) in ProcShmCreatePixmap()
1111 VERIFY_SHMSIZE(shmdesc, stuff->offset, size, client); in ProcShmCreatePixmap()
1112 screen_priv = ShmGetScreenPriv(pDraw->pScreen); in ProcShmCreatePixmap()
1113 pMap = (*screen_priv->shmFuncs->CreatePixmap) (pDraw->pScreen, stuff->width, in ProcShmCreatePixmap()
1114 stuff->height, stuff->depth, in ProcShmCreatePixmap()
1115 shmdesc->addr + in ProcShmCreatePixmap()
1116 stuff->offset); in ProcShmCreatePixmap()
1118 rc = XaceHook(XACE_RESOURCE_ACCESS, client, stuff->pid, RT_PIXMAP, in ProcShmCreatePixmap()
1121 pDraw->pScreen->DestroyPixmap(pMap); in ProcShmCreatePixmap()
1124 dixSetPrivate(&pMap->devPrivates, shmPixmapPrivateKey, shmdesc); in ProcShmCreatePixmap()
1125 shmdesc->refcnt++; in ProcShmCreatePixmap()
1126 pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER; in ProcShmCreatePixmap()
1127 pMap->drawable.id = stuff->pid; in ProcShmCreatePixmap()
1128 if (AddResource(stuff->pid, RT_PIXMAP, (void *) pMap)) { in ProcShmCreatePixmap()
1143 (unsigned int) shmdesc->resource); in ShmBusfaultNotify()
1144 busfault_unregister(shmdesc->busfault); in ShmBusfaultNotify()
1145 shmdesc->busfault = NULL; in ShmBusfaultNotify()
1146 FreeResource (shmdesc->resource, RT_NONE); in ShmBusfaultNotify()
1159 LEGAL_NEW_RESOURCE(stuff->shmseg, client); in ProcShmAttachFd()
1160 if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) { in ProcShmAttachFd()
1161 client->errorValue = stuff->readOnly; in ProcShmAttachFd()
1178 shmdesc->is_fd = TRUE; in ProcShmAttachFd()
1179 shmdesc->addr = mmap(NULL, statb.st_size, in ProcShmAttachFd()
1180 stuff->readOnly ? PROT_READ : PROT_READ|PROT_WRITE, in ProcShmAttachFd()
1185 if (shmdesc->addr == ((char *) -1)) { in ProcShmAttachFd()
1190 shmdesc->refcnt = 1; in ProcShmAttachFd()
1191 shmdesc->writable = !stuff->readOnly; in ProcShmAttachFd()
1192 shmdesc->size = statb.st_size; in ProcShmAttachFd()
1193 shmdesc->resource = stuff->shmseg; in ProcShmAttachFd()
1195 …shmdesc->busfault = busfault_register_mmap(shmdesc->addr, shmdesc->size, ShmBusfaultNotify, shmdes… in ProcShmAttachFd()
1196 if (!shmdesc->busfault) { in ProcShmAttachFd()
1197 munmap(shmdesc->addr, shmdesc->size); in ProcShmAttachFd()
1202 shmdesc->next = Shmsegs; in ProcShmAttachFd()
1205 if (!AddResource(stuff->shmseg, ShmSegType, (void *) shmdesc)) in ProcShmAttachFd()
1222 if (fd != -1) { in shm_tmpfile()
1242 snprintf(template, ARRAY_SIZE(template), "%s/shmfd-XXXXXX", shmdirs[i]); in shm_tmpfile()
1253 if (flags != -1) { in shm_tmpfile()
1261 return -1; in shm_tmpfile()
1273 .sequenceNumber = client->sequence, in ProcShmCreateSegment()
1278 LEGAL_NEW_RESOURCE(stuff->shmseg, client); in ProcShmCreateSegment()
1279 if ((stuff->readOnly != xTrue) && (stuff->readOnly != xFalse)) { in ProcShmCreateSegment()
1280 client->errorValue = stuff->readOnly; in ProcShmCreateSegment()
1286 if (ftruncate(fd, stuff->size) < 0) { in ProcShmCreateSegment()
1295 shmdesc->is_fd = TRUE; in ProcShmCreateSegment()
1296 shmdesc->addr = mmap(NULL, stuff->size, in ProcShmCreateSegment()
1297 stuff->readOnly ? PROT_READ : PROT_READ|PROT_WRITE, in ProcShmCreateSegment()
1301 if (shmdesc->addr == ((char *) -1)) { in ProcShmCreateSegment()
1307 shmdesc->refcnt = 1; in ProcShmCreateSegment()
1308 shmdesc->writable = !stuff->readOnly; in ProcShmCreateSegment()
1309 shmdesc->size = stuff->size; in ProcShmCreateSegment()
1311 …shmdesc->busfault = busfault_register_mmap(shmdesc->addr, shmdesc->size, ShmBusfaultNotify, shmdes… in ProcShmCreateSegment()
1312 if (!shmdesc->busfault) { in ProcShmCreateSegment()
1314 munmap(shmdesc->addr, shmdesc->size); in ProcShmCreateSegment()
1319 shmdesc->next = Shmsegs; in ProcShmCreateSegment()
1322 if (!AddResource(stuff->shmseg, ShmSegType, (void *) shmdesc)) { in ProcShmCreateSegment()
1328 FreeResource(stuff->shmseg, RT_NONE); in ProcShmCreateSegment()
1342 if (stuff->data == X_ShmQueryVersion) in ProcShmDispatch()
1345 if (!client->local) in ProcShmDispatch()
1348 switch (stuff->data) { in ProcShmDispatch()
1385 to->type = from->type; in SShmCompletionEvent()
1386 cpswaps(from->sequenceNumber, to->sequenceNumber); in SShmCompletionEvent()
1387 cpswapl(from->drawable, to->drawable); in SShmCompletionEvent()
1388 cpswaps(from->minorEvent, to->minorEvent); in SShmCompletionEvent()
1389 to->majorEvent = from->majorEvent; in SShmCompletionEvent()
1390 cpswapl(from->shmseg, to->shmseg); in SShmCompletionEvent()
1391 cpswapl(from->offset, to->offset); in SShmCompletionEvent()
1399 swaps(&stuff->length); in SProcShmQueryVersion()
1407 swaps(&stuff->length); in SProcShmAttach()
1409 swapl(&stuff->shmseg); in SProcShmAttach()
1410 swapl(&stuff->shmid); in SProcShmAttach()
1418 swaps(&stuff->length); in SProcShmDetach()
1420 swapl(&stuff->shmseg); in SProcShmDetach()
1428 swaps(&stuff->length); in SProcShmPutImage()
1430 swapl(&stuff->drawable); in SProcShmPutImage()
1431 swapl(&stuff->gc); in SProcShmPutImage()
1432 swaps(&stuff->totalWidth); in SProcShmPutImage()
1433 swaps(&stuff->totalHeight); in SProcShmPutImage()
1434 swaps(&stuff->srcX); in SProcShmPutImage()
1435 swaps(&stuff->srcY); in SProcShmPutImage()
1436 swaps(&stuff->srcWidth); in SProcShmPutImage()
1437 swaps(&stuff->srcHeight); in SProcShmPutImage()
1438 swaps(&stuff->dstX); in SProcShmPutImage()
1439 swaps(&stuff->dstY); in SProcShmPutImage()
1440 swapl(&stuff->shmseg); in SProcShmPutImage()
1441 swapl(&stuff->offset); in SProcShmPutImage()
1449 swaps(&stuff->length); in SProcShmGetImage()
1451 swapl(&stuff->drawable); in SProcShmGetImage()
1452 swaps(&stuff->x); in SProcShmGetImage()
1453 swaps(&stuff->y); in SProcShmGetImage()
1454 swaps(&stuff->width); in SProcShmGetImage()
1455 swaps(&stuff->height); in SProcShmGetImage()
1456 swapl(&stuff->planeMask); in SProcShmGetImage()
1457 swapl(&stuff->shmseg); in SProcShmGetImage()
1458 swapl(&stuff->offset); in SProcShmGetImage()
1466 swaps(&stuff->length); in SProcShmCreatePixmap()
1468 swapl(&stuff->pid); in SProcShmCreatePixmap()
1469 swapl(&stuff->drawable); in SProcShmCreatePixmap()
1470 swaps(&stuff->width); in SProcShmCreatePixmap()
1471 swaps(&stuff->height); in SProcShmCreatePixmap()
1472 swapl(&stuff->shmseg); in SProcShmCreatePixmap()
1473 swapl(&stuff->offset); in SProcShmCreatePixmap()
1483 swaps(&stuff->length); in SProcShmAttachFd()
1485 swapl(&stuff->shmseg); in SProcShmAttachFd()
1493 swaps(&stuff->length); in SProcShmCreateSegment()
1495 swapl(&stuff->shmseg); in SProcShmCreateSegment()
1496 swapl(&stuff->size); in SProcShmCreateSegment()
1506 if (stuff->data == X_ShmQueryVersion) in SProcShmDispatch()
1509 if (!client->local) in SProcShmDispatch()
1512 switch (stuff->data) { in SProcShmDispatch()
1542 ErrorF("MIT-SHM extension disabled due to lack of kernel support\n"); in ShmExtensionInit()
1556 if (!screen_priv->shmFuncs) in ShmExtensionInit()
1557 screen_priv->shmFuncs = &miFuncs; in ShmExtensionInit()
1558 if (!screen_priv->shmFuncs->CreatePixmap) in ShmExtensionInit()
1565 screen_priv->destroyPixmap = in ShmExtensionInit()
1566 screenInfo.screens[i]->DestroyPixmap; in ShmExtensionInit()
1567 screenInfo.screens[i]->DestroyPixmap = ShmDestroyPixmap; in ShmExtensionInit()
1575 ShmReqCode = (unsigned char) extEntry->base; in ShmExtensionInit()
1576 ShmCompletionCode = extEntry->eventBase; in ShmExtensionInit()
1577 BadShmSegCode = extEntry->errorBase; in ShmExtensionInit()