RossComputerGuy/stardustos

View on GitHub
newland/src/bus.c

Summary

Maintainability
Test Coverage
/**
* NewLand Kernel - (C) 2019 Tristan Ross
*/
#include <newland/alloc.h>
#include <newland/bus.h>
#include <newland/log.h>
#include <newland/errno.h>
 
SLIST_HEAD(bus_list, bus_t);
static struct bus_list buses = { NULL };
static size_t buses_count = 0;
 
The function `bus_count` is never used.
size_t bus_count() {
return buses_count;
}
 
The function `bus_get` is never used.
bus_t* bus_get(size_t i) {
bus_t* bus = NULL;
size_t index = 0;
SLIST_FOREACH(bus, &buses, bus_list) {
if (index == i) return bus;
index++;
}
return NULL;
}
 
bus_t* bus_fromname(const char* name) {
bus_t* bus = NULL;
SLIST_FOREACH(bus, &buses, bus_list) {
if (!strcmp(bus->name, name)) return bus;
}
return NULL;
}
 
The function `bus_regdev` is never used.
int bus_regdev(bus_t* bus, const char* name, const char* dname) {
if (bus_getdev(bus, dname) != NULL) return -NEWLAND_EEXIST;
bus_dev_t* bdev = bus_getdevbyname(bus, name);
if (bdev == NULL) return -NEWLAND_ENOENT;
strcpy((char*)bdev->dname, dname);
TODO found
// TODO: maybe the bus should have a function call for handling the registration
return 0;
}
 
The function `bus_unregdev` is never used.
int bus_unregdev(bus_t* bus, const char* name, const char* dname) {
if (bus_getdev(bus, dname) == NULL) return -NEWLAND_ENOENT;
bus_dev_t* bdev = bus_getdevbyname(bus, name);
if (bdev == NULL) return -NEWLAND_ENOENT;
memset((void*)bdev->dname, 0, NAME_MAX);
TODO found
// TODO: maybe the bus should have a function call for handling the unregistring
return 0;
}
 
device_t* bus_getdev(bus_t* bus, const char* name) {
device_t* dev = NULL;
bus_dev_t* bdev = NULL;
SLIST_FOREACH(bdev, &bus->dev_list, dev_list) {
if (strlen(bdev->dname) == 0) continue;
dev = device_fromname(bdev->dname);
if (dev == NULL) continue;
if (!strcmp(dev->name, name)) return dev;
}
return NULL;
}
 
bus_dev_t* bus_getdevbyname(bus_t* bus, const char* name) {
bus_dev_t* dev = NULL;
SLIST_FOREACH(dev, &bus->dev_list, dev_list) {
if (!strcmp(dev->name, name)) return dev;
}
return NULL;
}
 
int bus_adddev(bus_t* bus, const char* name) {
if (bus_getdevbyname(bus, name) != NULL) return -NEWLAND_EEXIST;
bus_dev_t* dev = kmalloc(sizeof(bus_dev_t));
if (dev == NULL) return -NEWLAND_ENOMEM;
strcpy((char*)dev->name, name);
SLIST_INSERT_HEAD(&bus->dev_list, dev, dev_list);
bus->dev_count++;
return 0;
}
 
The function `bus_remdev` is never used.
int bus_remdev(bus_t* bus, const char* name) {
bus_dev_t* dev = bus_getdevbyname(bus, name);
if (dev == NULL) return -NEWLAND_ENOENT;
SLIST_REMOVE(&bus->dev_list, dev, bus_dev_t, dev_list);
bus->dev_count--;
return 0;
}
 
int register_bus(const char* type, const char* name) {
if ((type != NULL && strlen(type) > NAME_MAX) || strlen(name) > NAME_MAX) return -NEWLAND_ENAMETOOLONG;
bus_t* bus = kmalloc(sizeof(bus_t));
if (bus == NULL) return -NEWLAND_ENOMEM;
if (type != NULL) strcpy((char*)bus->type, type);
strcpy((char*)bus->name, name);
bus->dev_count = 0;
SLIST_INSERT_HEAD(&buses, bus, bus_list);
buses_count++;
printk(KLOG_INFO "bus: registered: %s\n", name);
return 0;
}
 
int unregister_bus(const char* name) {
bus_t* bus = bus_fromname(name);
if (bus == NULL) return -NEWLAND_ENOENT;
SLIST_REMOVE(&buses, bus, bus_t, bus_list);
buses_count--;
bus_dev_t* dev = NULL;
SLIST_FOREACH(dev, &bus->dev_list, dev_list) {
bus_dev_res_t* res = NULL;
SLIST_FOREACH(res, &dev->res_list, res_list) {
kfree(res);
}
kfree(dev);
}
kfree(bus);
printk(KLOG_INFO "bus: unregistered: %s\n", name);
return 0;
}