int memmgr_info(resmgr_context_t *ctp, PROCESS *prp, mem_info_t *msg) { OBJECT *obp; int r; unsigned flags; paddr_t size; if(msg->i.fd != NOFD) { r = memmgr_find_object(ctp, prp, msg->i.fd, NULL, &obp); switch(r) { case EOK: if(obp != NULL) break; // fall through case ENOTSUP: r = ENODEV; // fall through default: return r; } switch(obp->hdr.type) { case OBJECT_MEM_TYPED: flags = get_flags(ctp, msg->i.fd); if(flags & IMAP_TYMEM_ALLOCATE) { tymem_free_info(obp, &size, NULL); } else if(flags & IMAP_TYMEM_ALLOCATE_CONTIG) { tymem_free_info(obp, NULL, &size); } else { size = 0; } memset(&msg->o, 0x00, sizeof msg->o); msg->o.info.posix_tmi_length = size; memobj_unlock(obp); return _RESMGR_PTR(ctp, &msg->o, sizeof msg->o); default: break; } memobj_unlock(obp); return ENODEV; } if(!(msg->i.flags & MAP_ANON)) { switch(msg->i.flags & MAP_TYPE) { case MAP_PRIVATEANON: case MAP_PRIVATE: break; case MAP_SHARED: return EINVAL; default: break; } } if(msg->i.flags & MAP_PHYS) { /* @@@ Don't support returning largest chuck yet */ return EINVAL; } memset(&msg->o, 0x00, sizeof msg->o); msg->o.info.posix_tmi_length = mem_free_size; return _RESMGR_PTR(ctp, &msg->o, sizeof msg->o); }
/* * ======== syslink_heapbufmp_create ======== */ int syslink_heapbufmp_create( resmgr_context_t * ctp, io_devctl_t * msg, syslink_ocb_t * ocb) { HeapBufMPDrv_CmdArgs * cargs; HeapBufMP_Params * params; SharedRegion_SRPtr srptr; Ptr gateAttrs; HeapBufMP_Handle handle; Int status; status = 0; handle = NULL; /* extract input data */ cargs = (HeapBufMPDrv_CmdArgs *)(_DEVCTL_DATA(msg->i)); params = (HeapBufMP_Params *)(cargs+1); params->name = (String)(params+1); /* compute shared region address */ srptr = cargs->args.create.sharedAddrSrPtr; if (srptr != SharedRegion_INVALIDSRPTR) { params->sharedAddr = SharedRegion_getPtr(srptr); } else { params->sharedAddr = NULL; } /* open the gate instance to get a handle */ srptr = cargs->args.create.gateAttrs; if (srptr != SharedRegion_INVALIDSRPTR) { gateAttrs = SharedRegion_getPtr(srptr); status = GateMP_openByAddr(gateAttrs, ¶ms->gate); } else { params->gate = NULL; } /* invoke the requested api */ if (status >= 0) { handle = HeapBufMP_create(params); } /* clear the return message, setup return values */ memset(&msg->o, 0, sizeof(msg->o)); msg->o.nbytes = sizeof(HeapBufMPDrv_CmdArgs); cargs->args.create.handle = handle; if (handle == NULL) { cargs->apiStatus = HeapBufMP_E_FAIL; } else { cargs->apiStatus = HeapBufMP_S_SUCCESS; /* add object to the cleanup list */ add_ocb_res(ocb, DCMD_HEAPBUFMP_DELETE, (int)handle, NULL); } return(_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) + msg->o.nbytes)); }
/* * ======== syslink_frameq_delete ======== */ int syslink_frameq_delete( resmgr_context_t * ctp, io_devctl_t * msg, syslink_ocb_t * ocb) { FrameQDrv_CmdArgs * cargs; FrameQ_Handle * handlePtr; GateMP_Handle gate; cargs = (FrameQDrv_CmdArgs *)(_DEVCTL_DATA(msg->i)); handlePtr = (FrameQ_Handle *)(&cargs->args.deleteInstance.handle); /* save gate handle, need to close it after delete */ gate = FrameQ_getGate(*handlePtr); /* invoke the requested api */ cargs->apiStatus = FrameQ_delete(handlePtr); GT_assert(curTrace, (cargs->apiStatus >= 0)); /* close the gate instance if not the default gate */ if (gate != GateMP_getDefaultRemote()) { GateMP_close(&gate); } /* clear the return message, setup return values */ memset(&msg->o, 0, sizeof(msg->o)); msg->o.nbytes = sizeof(FrameQDrv_CmdArgs); return(_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) + msg->o.nbytes)); }
static int mem_lseek(resmgr_context_t *ctp, io_lseek_t *msg, void *vocb) { struct mem_ocb *ocb = vocb; unsigned pos; unsigned size; if(ocb == NULL) { return EOK; } pos = (off_t)msg->i.offset; switch(msg->i.whence) { case SEEK_SET: break; case SEEK_CUR: pos = ocb->pos + pos; break; case SEEK_END: size = ocb->object ? OBJECT_SIZE(ocb->object) : UINT_MAX; pos = size + pos; break; default: return EINVAL; } ocb->pos = pos; if(msg->i.combine_len & _IO_COMBINE_FLAG) { return EOK; } msg->o = ocb->pos; return _RESMGR_PTR(ctp, &msg->o, sizeof msg->o); }
int syslink_frameq_put(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); FrameQ_Frame frame; FrameQ_FrameBufInfo *frameBufInfo; Ptr virtPtr; Ptr addr; int i; /* Convert frame address and frame buffer address in to knl virtual * format. */ frame = Memory_translate (cargs->args.put.frame, Memory_XltFlags_Phys2Virt); GT_assert(curTrace,(frame != NULL)); frameBufInfo = (FrameQ_FrameBufInfo *)&(frame->frameBufInfo[0]); for(i = 0; i < frame->numFrameBuffers; i++) { addr = (Ptr)frameBufInfo[i].bufPtr; virtPtr = Memory_translate(addr, Memory_XltFlags_Phys2Virt); GT_assert(curTrace,(virtPtr != NULL)); frameBufInfo[i].bufPtr = (UInt32)virtPtr; } out->apiStatus = FrameQ_put (cargs->args.put.handle, frame); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/* * ======== syslink_ipcmemmgr_acquire ======== */ int syslink_ipcmemmgr_acquire( resmgr_context_t * ctp, io_devctl_t * msg, syslink_ocb_t * ocb) { IpcMemMgrDrv_CmdArgs * cmdArgs; String name; SizeT size; Ptr addr; Bool newAlloc; Int status; /* extract input data */ cmdArgs = (IpcMemMgrDrv_CmdArgs *)(_DEVCTL_DATA(msg->i)); name = (String)(cmdArgs+1); size = cmdArgs->args.acquire.size; /* invoke the requested api */ status = IpcMemMgr_acquire(name, size, &addr, &newAlloc); /* clear the return message, setup return values */ memset(&msg->o, 0, sizeof(msg->o)); msg->o.ret_val = status; msg->o.nbytes = sizeof(IpcMemMgrDrv_CmdArgs); cmdArgs->args.acquire.offset = IpcMemMgr_getOffset(addr); cmdArgs->args.acquire.newAlloc = newAlloc; return(_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) + msg->o.nbytes)); }
/* * ======== syslink_ipcmemmgr_alloc ======== */ int syslink_ipcmemmgr_alloc( resmgr_context_t * ctp, io_devctl_t * msg, syslink_ocb_t * ocb) { IpcMemMgrDrv_CmdArgs * cmdArgs; SizeT size; Ptr addr; Int status; /* extract input data */ cmdArgs = (IpcMemMgrDrv_CmdArgs *)(_DEVCTL_DATA(msg->i)); size = cmdArgs->args.alloc.size; /* invoke the requested api */ addr = IpcMemMgr_alloc(size); status = (addr == NULL ? IpcMemMgr_E_MEMORY : IpcMemMgr_S_SUCCESS); /* clear the return message, setup return values */ memset(&msg->o, 0, sizeof(msg->o)); msg->o.ret_val = status; msg->o.nbytes = sizeof(IpcMemMgrDrv_CmdArgs); cmdArgs->args.alloc.offset = IpcMemMgr_getOffset(addr); return(_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) + msg->o.nbytes)); }
/* * ======== syslink_ipcmemmgr_setup ======== */ int syslink_ipcmemmgr_setup( resmgr_context_t * ctp, io_devctl_t * msg, syslink_ocb_t * ocb) { IpcMemMgr_Config * config; Int status; /* extract input data */ config = (IpcMemMgr_Config *)(_DEVCTL_DATA(msg->i)); /* invoke the requested api */ status = IpcMemMgr_setup(config); if (status >= 0) { /* add object to the cleanup list */ add_ocb_res(ocb, DCMD_IPCMEMMGR_DESTROY, (int)NULL, NULL); } /* clear the return message, setup return values */ memset(&msg->o, 0, sizeof(msg->o)); msg->o.ret_val = status; msg->o.nbytes = sizeof(IpcMemMgr_Config); return(_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) + msg->o.nbytes)); }
static int mem_stat(resmgr_context_t *ctp, io_stat_t *msg, void *vocb) { struct mem_ocb *ocb = vocb; union object *obp = ocb ? ocb->object : 0; size_t size = ocb ? (obp ? OBJECT_SIZE(obp) : UINT_MAX) : 0; memset(&msg->o, 0x00, sizeof msg->o); msg->o.st_size = size; msg->o.st_nblocks = (size + (__PAGESIZE-1)) / __PAGESIZE; msg->o.st_blocksize = msg->o.st_blksize = __PAGESIZE; msg->o.st_ctime = msg->o.st_mtime = msg->o.st_atime =(obp ? obp->mem.pm.mtime : time(0)); msg->o.st_ino = obp ? (uintptr_t)INODE_XOR(obp) : 1; if(ocb && obp) { msg->o.st_uid = obp->mem.pm.uid; msg->o.st_gid = obp->mem.pm.gid; msg->o.st_mode = (obp->mem.pm.mode != 0) ? obp->mem.pm.mode : S_IFNAM | S_IPERMS; msg->o.st_nlink = obp->hdr.refs; msg->o.st_dev = path_devno; msg->o.st_rdev = S_ISNAM(msg->o.st_mode) ? S_INSHD : 0; } else { //The /dev/mem device is set to rw root only, the /dev/shmem //device is set to rwx for all, since it is un-enforced. msg->o.st_mode = ocb ? S_IFREG | 0600 : S_IFDIR | 0777; msg->o.st_nlink = ocb ? 1 : 2; msg->o.st_dev = mem_devno; msg->o.st_rdev = 0; } msg->o.st_dev |= (ctp->info.srcnd << ND_NODE_BITS); return _RESMGR_PTR(ctp, &msg->o, sizeof msg->o); }
/* * ======== syslink_heapbufmp_delete ======== */ int syslink_heapbufmp_delete( resmgr_context_t * ctp, io_devctl_t * msg, syslink_ocb_t * ocb) { HeapBufMPDrv_CmdArgs * cargs; HeapBufMP_Handle * handlePtr; GateMP_Handle gate; Int status; /* extract input data */ cargs = (HeapBufMPDrv_CmdArgs *)(_DEVCTL_DATA(msg->i)); handlePtr = (HeapBufMP_Handle *)(&cargs->args.deleteInstance.handle); /* save gate handle, need to close it after delete */ gate = HeapBufMP_getGate(*handlePtr); /* remove object from cleanup list */ remove_ocb_res(ocb, DCMD_HEAPBUFMP_DELETE, (int)(*handlePtr), NULL); /* invoke the requested api */ status = HeapBufMP_delete(handlePtr); /* close the gate instance if not the default gate */ if (gate != GateMP_getDefaultRemote()) { GateMP_close(&gate); } /* clear the return message, setup return values */ memset(&msg->o, 0, sizeof(msg->o)); msg->o.nbytes = sizeof(HeapBufMPDrv_CmdArgs); cargs->apiStatus = status; return(_RESMGR_PTR(ctp, &msg->o, sizeof(msg->o) + msg->o.nbytes)); }
/** * Handler for shared region clear reserved memory API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_clearreservedmemory(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * cargs = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); SharedRegion_clearReservedMemory (); cargs->apiStatus = SharedRegion_S_SUCCESS; return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }
int iofunc_stat_default(resmgr_context_t *ctp, io_stat_t *msg, iofunc_ocb_t *ocb) { int status; (void)iofunc_time_update(ocb->attr); if ((status = iofunc_stat(ctp, ocb->attr, &msg->o)) != EOK) return(status); return _RESMGR_PTR(ctp, &msg->o, sizeof msg->o); }
/** * Handler for messageq unblock API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_messageq_unblock(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { MessageQDrv_CmdArgs * cargs = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); MessageQ_unblock (cargs->args.unblock.handle); cargs->apiStatus = MessageQ_S_SUCCESS; return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(MessageQDrv_CmdArgs))); }
int syslink_frameq_unreg_notifier(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = FrameQ_unregisterNotifier (cargs->args.unregNotifier.handle); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
int syslink_frameq_reset_notifyid(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = _FrameQ_resetNotifyId (cargs->args.resetNotifyId.handle,cargs->args.resetNotifyId.notifyId); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
int syslink_frameq_params_init(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ //Linux side implementation commented out FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = FrameQ_E_NOTIMPLEMENTED; return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
int syslink_frameq_close(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = FrameQ_close ((FrameQ_Handle *)&(cargs->args.close.handle)); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/** * Handler for shared region stop API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_stop(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = SharedRegion_stop (); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }
int syslink_frameq_reg_notifier(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = FrameQ_registerNotifier (cargs->args.regNotifier.handle,&cargs->args.regNotifier.notifyParams); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/** * Handler for messageq destroy API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_messageq_destroy(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { MessageQDrv_CmdArgs * out = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = MessageQ_destroy (); GT_assert (curTrace, ( out->apiStatus >= 0)); if (out->apiStatus >= 0) remove_ocb_res(ocb, DCMD_MESSAGEQ_DESTROY, NULL, NULL); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(MessageQDrv_CmdArgs))); }
/** * Handler for messageq unregisterheap API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_messageq_unregisterheap(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { MessageQDrv_CmdArgs * cargs = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); MessageQDrv_CmdArgs * out = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = MessageQ_unregisterHeap(cargs->args.unregisterHeap.heapId); if (out->apiStatus >= 0) remove_ocb_res(ocb, DCMD_MESSAGEQ_UNREGISTERHEAP, (int)cargs->args.unregisterHeap.heapId, NULL); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(MessageQDrv_CmdArgs))); }
/** * Handler for messageq detach API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_messageq_detach(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { MessageQDrv_CmdArgs * cargs = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); MessageQDrv_CmdArgs * out = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = MessageQ_detach (cargs->args.attach.remoteProcId); if (out->apiStatus >= 0) remove_ocb_res(ocb, DCMD_MESSAGEQ_DETACH, (int)cargs->args.attach.remoteProcId, NULL); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(MessageQDrv_CmdArgs))); }
int syslink_frameq_destroy(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = FrameQ_destroy (); GT_assert (curTrace, ( out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/** * Handler for shared region detach API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_detach(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * cargs = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = SharedRegion_detach (cargs->args.attach.remoteProcId); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }
int _spi_read(resmgr_context_t *ctp, io_read_t *msg, spi_ocb_t *ocb) { uint8_t *buf; int nbytes; int nonblock = 0; int status; SPIDEV *drvhdl = (SPIDEV *)ocb->hdr.attr; spi_dev_t *dev = drvhdl->hdl; if ((status = iofunc_read_verify(ctp, msg, &ocb->hdr, &nonblock)) != EOK) return status; if ((msg->i.xtype & _IO_XTYPE_MASK) != _IO_XTYPE_NONE) return ENOSYS; /* * Check to see if the device is locked */ if ((status =_spi_lock_check(ctp, ocb->chip, ocb)) != EOK) return status; if (msg->i.nbytes <= 0) { _IO_SET_READ_NBYTES(ctp, 0); return _RESMGR_NPARTS(0); } /* check if message buffer is too short */ nbytes = msg->i.nbytes; if (nbytes > ctp->msg_max_size) { if (dev->buflen < nbytes) { dev->buflen = nbytes; if (dev->buf) free(dev->buf); if (NULL == (dev->buf = malloc(dev->buflen))) { dev->buflen = 0; return ENOMEM; } } buf = dev->buf; } else buf = (uint8_t *)msg; buf = dev->funcs->xfer(drvhdl, _SPI_DEV_READ(ocb->chip), buf, &nbytes); if (nbytes > 0) { _IO_SET_READ_NBYTES(ctp, nbytes); return _RESMGR_PTR(ctp, buf, nbytes); } return EIO; }
int syslink_frameq_get_numframes(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); UInt32 numFrames; out->apiStatus = FrameQ_getNumFrames(cargs->args.getNumFrames.handle,&numFrames); out->args.getNumFrames.numFrames = numFrames; return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/** * Handler for heap buf mp destroy API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_heapbufmp_destroy(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { HeapBufMPDrv_CmdArgs * out = (HeapBufMPDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = HeapBufMP_destroy (); GT_assert (curTrace, (out->apiStatus >= 0)); if (out->apiStatus >= 0) { /* Remove this call from the list to be cleaned-up */ remove_ocb_res(ocb, DCMD_HEAPBUFMP_DESTROY, (int)NULL, NULL); } return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(HeapBufMPDrv_CmdArgs))); }
/** * Handler for messageq setup API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_messageq_registerheap(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { MessageQDrv_CmdArgs * cargs = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); MessageQDrv_CmdArgs * out = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = MessageQ_registerHeap (cargs->args.registerHeap.heap, cargs->args.registerHeap.heapId); if (out->apiStatus >= 0) { /* At this call to the list to be cleaned-up */ add_ocb_res(ocb, DCMD_MESSAGEQ_UNREGISTERHEAP, (int)cargs->args.registerHeap.heapId, NULL); } return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(MessageQDrv_CmdArgs))); }
/** * Handler for messageq shared mem request API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_messageq_sharedmemreq(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { MessageQDrv_CmdArgs * cargs = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); MessageQDrv_CmdArgs * out = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); Ptr sharedAddr; sharedAddr = SharedRegion_getPtr ( cargs->args.sharedMemReq.sharedAddrSrPtr); out->args.sharedMemReq.memReq = MessageQ_sharedMemReq (sharedAddr); out->apiStatus = MessageQ_S_SUCCESS; return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(MessageQDrv_CmdArgs))); }
int syslink_frameq_setup(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); FrameQ_Config *config = (FrameQ_Config*)(cargs+1); out->apiStatus = FrameQ_setup (config); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }