};
}
- static struct sysret handle_frame_modify_flags(struct capability *to,
- int cmd, uintptr_t *args)
- {
- // Modify flags of (part of) mapped region of frame
- assert(to->type == ObjType_Frame || to->type == ObjType_DevFrame);
-
- // unpack arguments
- size_t offset = args[0]; // in pages; of first page to modify from first
- // page in mapped region
- size_t pages = args[1]; // #pages to modify
- size_t flags = args[2]; // new flags
- genvaddr_t va = args[3]; // virtual addr hint
-
- page_mappings_modify_flags(to, offset, pages, flags, va);
-
- return (struct sysret) {
- .error = SYS_ERR_OK,
- .value = 0,
- };
- }
-
-#ifdef __scc__
-static struct sysret handle_frame_scc_identify(struct capability *to,
- int cmd, uintptr_t *args)
-{
- // Return with physical base address of frame
- // XXX: pack size into bottom bits of base address
- assert(to->type == ObjType_Frame || to->type == ObjType_DevFrame);
- assert((to->u.frame.base & BASE_PAGE_MASK) == 0);
- assert(to->u.frame.bits < BASE_PAGE_SIZE);
-
- uint8_t route, subdest;
- uint16_t addrbits;
-
- errval_t err = rck_get_route(to->u.frame.base, 1 << to->u.frame.bits,
- &route, &subdest, &addrbits);
- if(err_is_fail(err)) {
- return SYSRET(err);
- }
-
- return (struct sysret) {
- .error = SYS_ERR_OK,
- .value = (addrbits << 16) | (subdest << 8) | route,
- };
-}
-#endif
-
static struct sysret handle_io(struct capability *to, int cmd, uintptr_t *args)
{
uint32_t port = args[0];
},
[ObjType_Frame] = {
[FrameCmd_Identify] = handle_frame_identify,
},
[ObjType_DevFrame] = {
[FrameCmd_Identify] = handle_frame_identify,
- [FrameCmd_ModifyFlags] = handle_frame_modify_flags,
-#ifdef __scc__
- [FrameCmd_SCC_Identify] = handle_frame_scc_identify
-#endif
},
[ObjType_CNode] = {
[CNodeCmd_Copy] = handle_copy,