-struct device*
-device_addseq(struct device* parent, void* underlay, char* name_fmt, ...)
+struct device_alias*
+device_alloc_alias(struct device_meta* parent, struct device_meta* aliased)
+{
+ struct device_alias* dev = vzalloc(sizeof(struct device_alias));
+
+ if (!dev) {
+ return NULL;
+ }
+
+ dev->alias = aliased;
+ changeling_ref(dev_mobj(aliased));
+ changeling_morph(dev_morph(parent), dev->mobj, NULL, devalias_morpher);
+
+ return dev;
+}
+
+struct device_cat*
+device_alloc_cat(struct device_meta* parent)
+{
+ struct device_cat* dev = vzalloc(sizeof(struct device_cat));
+
+ if (!dev) {
+ return NULL;
+ }
+
+ changeling_morph(dev_morph(parent), dev->mobj, NULL, devcat_morpher);
+
+ return dev;
+}
+
+void
+device_setname(struct device_meta* dev, char* fmt, ...)