#include <trace_definitions/trace_defs.h>
#include <kcb.h>
-
-
-// If you create more capability types you need to deal with them
-// in the table below.
-STATIC_ASSERT(27 == ObjType_Num, "Knowledge of all cap types");
-
-
-errval_t
-caps_debug_print(struct cte *c, struct cap_visited_list *parent)
-{
- genpaddr_t base;
- uint8_t bits;
- char* name = NULL;
-
-// struct cap_visited_list this = { .parent = parent, .c = c };
-
- switch (c->cap.type) {
- // all cap types
- case ObjType_CNode: {
-// struct CNode *cn = &(c->cap.u.cnode);
-// for (cslot_t slot = 0; slot < 1UL << cn->bits; slot++) {
-//
-// struct cte *child = (struct cte *) local_phys_to_mem(
-// cn->cnode + slot * sizeof(*c));
-//
-// uint8_t recurse = 1;
-//
-// struct cap_visited_list *p = parent;
-// int depth = 0;
-// while (p && recurse) {
-// recurse = p->c != child;
-// p = p->parent;
-// depth++;
-// }
-// if (recurse && depth < 4) {
-// errval_t err = caps_debug_print(child, &this);
-// if (err_is_fail(err)) {
-// return err;
-// }
-// }
-// }
- break;
- }
- case ObjType_PhysAddr: {
- base = c->cap.u.physaddr.base;
- bits = c->cap.u.physaddr.bits;
- name = "PhysAddr";
- break;
- }
- case ObjType_RAM: {
- base = c->cap.u.ram.base;
- bits = c->cap.u.ram.bits;
- name = "RAM";
- break;
- }
- case ObjType_Frame: {
- base = c->cap.u.frame.base;
- bits = c->cap.u.frame.bits;
- name = "Frame";
- break;
- }
- case ObjType_DevFrame: {
- base = c->cap.u.devframe.base;
- bits = c->cap.u.devframe.bits;
- name = "DevFrame";
- break;
- }
- case ObjType_Null: {
- break;
- }
- default: {
- // Unhandled source type for mint
- printk(LOG_NOTE, "Unknown capability type: %d\n", c->cap.type);
- break;
- }
- }
-
- if (name) {
- printk(LOG_NOTE,
- "%s: base=0x%"PRIxGENPADDR" bits=%d end=0x%"PRIxGENPADDR"\n",
- name, base, bits, base + (1UL << bits));
- }
-
- return SYS_ERR_OK;
-}
-
-
-static bool sys_debug_print_capabilities_check_cnode(struct cte *cte, struct cte **dispatcher) {
+static bool
+sys_debug_print_capabilities_check_cnode(struct cte *cte, struct cte **dispatcher) {
enum objtype type = cte->cap.type;
if (type == ObjType_Dispatcher) {
get_dispatcher_shared_generic(handle);
if (my_dcb == dcb) {
-// printk(LOG_NOTE, "disp->name=%s\n", disp->name);
- caps_debug_print(cte, NULL);
+ char buffer[256];
+ sprint_cap(buffer, 256, &cte->cap);
+ printk(LOG_NOTE, "disp->name=%s %s\n", disp->name, buffer);
}
return SYS_ERR_OK;
debug_print_cababilities(struct dcb *dispatcher) {
return mdb_traverse(MDB_TRAVERSAL_ORDER_ASCENDING, sys_debug_print_capabilities_cb, dispatcher);
}
-
-struct sysret
-sys_debug_print_capabilities(void) {
-
- errval_t err = debug_print_cababilities(dcb_current);
-
- return SYSRET(err);
-}