SYSCALL_INVOKE, invoke_cptr).error;
}
+static inline errval_t invoke_dispatcher_dump_capabilities(struct capref dispcap)
+{
+ uint8_t invoke_bits = get_cap_valid_bits(dispcap);
+ capaddr_t invoke_cptr = get_cap_addr(dispcap) >> (CPTR_BITS - invoke_bits);
+
+ return syscall2((invoke_bits << 16) | (DispatcherCmd_DumpCapabilities << 8) |
+ SYSCALL_INVOKE, invoke_cptr).error;
+}
+
static inline errval_t
invoke_dispatcher_properties(
struct capref dispatcher,
return cap_invoke1(dispcap, DispatcherCmd_DumpPTables).error;
}
+static inline errval_t invoke_dispatcher_dump_capabilities(struct capref dispcap)
+{
+ return cap_invoke1(dispcap, DispatcherCmd_DumpCapabilities).error;
+}
+
static inline errval_t invoke_perfmon_activate(struct capref perfmon_cap,
uint8_t event, uint8_t perf_umask,
bool kernel, uint8_t counter_id,
SYSCALL_INVOKE, invoke_cptr).error;
}
+static inline errval_t invoke_dispatcher_dump_capabilities(struct capref dispcap)
+{
+ uint8_t invoke_bits = get_cap_valid_bits(dispcap);
+ capaddr_t invoke_cptr = get_cap_addr(dispcap) >> (CPTR_BITS - invoke_bits);
+
+ return syscall2((invoke_bits << 16) | (DispatcherCmd_DumpCapabilities << 8) |
+ SYSCALL_INVOKE, invoke_cptr).error;
+}
+
static inline errval_t invoke_ipi_notify_send(struct capref notify_cap)
{
uint8_t invoke_bits = get_cap_valid_bits(notify_cap);
* \brief get time elapsed since system boot.
*/
uint64_t sys_get_absolute_time(void);
-
__END_DECLS
#endif //LIBBARRELFISH_SYSCALL_H
#include <dispatch.h>
#include <exec.h>
#include <stdio.h>
+#include <sys_debug.h>
#include <syscall.h>
#include <arch/arm/syscall_arm.h>
#include <start_aps.h>
return SYSRET(SYS_ERR_OK);
}
+static struct sysret dispatcher_dump_capabilities(struct capability *cap,
+ arch_registers_state_t* context, int argc)
+{
+ assert(cap->type == ObjType_Dispatcher);
+ assert(2 == argc);
+ struct dcb *dispatcher = cap->u.dispatcher.dcb;
+ errval_t err = debug_print_cababilities(dispatcher);
+ return SYSRET(err);
+}
+
static struct sysret handle_idcap_identify(struct capability *to,
arch_registers_state_t *context,
int argc)
[DispatcherCmd_Setup] = handle_dispatcher_setup,
[DispatcherCmd_Properties] = handle_dispatcher_properties,
[DispatcherCmd_PerfMon] = handle_dispatcher_perfmon,
- [DispatcherCmd_DumpPTables] = dispatcher_dump_ptables,
+ [DispatcherCmd_DumpPTables] = dispatcher_dump_ptables,
+ [DispatcherCmd_DumpCapabilities] = dispatcher_dump_capabilities
},
[ObjType_KernelControlBlock] = {
[FrameCmd_Identify] = handle_kcb_identify
break;
#endif
- case DEBUG_PRINT_CAPABILITIES: {
- retval = sys_debug_print_capabilities();
- break;
- }
-
default:
printk(LOG_ERR, "invalid sys_debug msg type %d\n", msg);
retval.error = err_push(retval.error, SYS_ERR_ILLEGAL_SYSCALL);
*/
#include <kernel.h>
+#include <sys_debug.h>
#include <syscall.h>
#include <barrelfish_kpi/syscalls.h>
#include <capabilities.h>
return SYSRET(SYS_ERR_OK);
}
+static struct sysret dispatcher_dump_capabilities(struct capability *cap,
+ int cmd, uintptr_t *args)
+{
+ assert(cap->type == ObjType_Dispatcher);
+ struct dcb *dispatcher = cap->u.dispatcher.dcb;
+ errval_t err = debug_print_cababilities(dispatcher);
+ return SYSRET(err);
+}
+
+
static struct sysret kernel_add_kcb(struct capability *kern_cap,
int cmd, uintptr_t *args)
{
[DispatcherCmd_Properties] = handle_dispatcher_properties,
[DispatcherCmd_PerfMon] = handle_dispatcher_perfmon,
[DispatcherCmd_DumpPTables] = dispatcher_dump_ptables,
+ [DispatcherCmd_DumpCapabilities] = dispatcher_dump_capabilities
},
[ObjType_KernelControlBlock] = {
[FrameCmd_Identify] = handle_kcb_identify,
.value = kernel_now + kcb_current->kernel_off,
};
}
-
-