struct dtp_table *props;
- morph_t *binded_dev;
+ morph_t *binded_obj;
};
struct dtspec_key
val->size = cells * sizeof(u32_t);
}
+static inline void
+dtn_bind_object(struct dtn* node, morph_t* mobj)
+{
+ node->base.binded_obj = changeling_ref(mobj);
+}
+
//////////////////////////////////////
/// DT Methods: Specifier Map
#define dtprop_reglike(base) \
({ \
dt_proplet p = { \
- dtprop_compx(base->addr_c), \
- dtprop_compx(base->sz_c), \
+ dtprop_compx((base)->addr_c), \
+ dtprop_compx((base)->sz_c), \
dtprop_end \
}; \
- dt_proplet; \
+ p; \
})
#define dtprop_rangelike(node) \
dtprop_compx(base->sz_c), \
dtprop_end \
}; \
- dt_proplet; \
+ p; \
})
#define dtprop_strlst_foreach(pos, prop) \
return dtpi->loc < dtpi->prop.size / sizeof(u32_t);
}
-static inline u32_t
-dtpi_next_u32(struct dtpropi* dtpi)
+static inline u64_t
+dtpi_next_integer(struct dtpropi* dtpi, int int_cells)
{
union dtp_baseval* val;
- val = (union dtp_baseval*)&dtpi->prop.encoded[dtpi->loc++];
- return val->u32_val;
+ off_t loc = dtpi->loc;
+ dtpi->loc += int_cells;
+ val = (union dtp_baseval*)&dtpi->prop.encoded[loc];
+
+ return int_cells == 1 ? val->u32_val : val->u64_val;
}
static inline u64_t
dtpi_next_u64(struct dtpropi* dtpi)
{
- union dtp_baseval* val;
- off_t loc = dtpi->loc;
- dtpi->loc += 2;
- val = (union dtp_baseval*)&dtpi->prop.encoded[loc];
-
- return val->u64_val;
+ return dtpi_next_integer(dtpi, 2);
+}
+
+static inline u32_t
+dtpi_next_u32(struct dtpropi* dtpi)
+{
+ return (u32_t)dtpi_next_integer(dtpi, 1);
}
static inline struct dtn*