diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/kernel/syscalls/syscall.c b/src/kernel/syscalls/syscall.c index 3987d0f..9b7d63f 100644 --- a/src/kernel/syscalls/syscall.c +++ b/src/kernel/syscalls/syscall.c @@ -56,8 +56,8 @@ extern uintptr_t handleLoadFromInitrdSyscall; extern uintptr_t handleIOInSyscall, handleIOOutSyscall; -extern uintptr_t handleGetServiceIdSyscall, handleGetProviderSyscall, - handleGetServiceSyscall, handleInstallSyscall, handleRequestSyscall; +extern uintptr_t handleGetServiceIdSyscall, handleGetFunctionSyscall, + handleGetServiceSyscall, handleCreateFunctionSyscall, handleRequestSyscall; extern uintptr_t handleCreateEventSyscall, handleGetEventSyscall, handleFireEventSyscall, handleSubscribeEventSyscall; extern uintptr_t handleSubscribeInterruptSyscall; @@ -67,13 +67,13 @@ void (*syscallHandlers[])(Syscall *) = { 0, - (void *)&handleInstallSyscall, + (void *)&handleCreateFunctionSyscall, (void *)&handleRequestSyscall, (void *)&handleIOInSyscall, (void *)&handleIOOutSyscall, (void *)&handleLoadFromInitrdSyscall, (void *)&handleGetServiceSyscall, - (void *)&handleGetProviderSyscall, + (void *)&handleGetFunctionSyscall, (void *)&handleSubscribeInterruptSyscall, (void *)&handleCreateEventSyscall, (void *)&handleGetEventSyscall, diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/kernel/syscalls/syscall.c b/src/kernel/syscalls/syscall.c index 3987d0f..9b7d63f 100644 --- a/src/kernel/syscalls/syscall.c +++ b/src/kernel/syscalls/syscall.c @@ -56,8 +56,8 @@ extern uintptr_t handleLoadFromInitrdSyscall; extern uintptr_t handleIOInSyscall, handleIOOutSyscall; -extern uintptr_t handleGetServiceIdSyscall, handleGetProviderSyscall, - handleGetServiceSyscall, handleInstallSyscall, handleRequestSyscall; +extern uintptr_t handleGetServiceIdSyscall, handleGetFunctionSyscall, + handleGetServiceSyscall, handleCreateFunctionSyscall, handleRequestSyscall; extern uintptr_t handleCreateEventSyscall, handleGetEventSyscall, handleFireEventSyscall, handleSubscribeEventSyscall; extern uintptr_t handleSubscribeInterruptSyscall; @@ -67,13 +67,13 @@ void (*syscallHandlers[])(Syscall *) = { 0, - (void *)&handleInstallSyscall, + (void *)&handleCreateFunctionSyscall, (void *)&handleRequestSyscall, (void *)&handleIOInSyscall, (void *)&handleIOOutSyscall, (void *)&handleLoadFromInitrdSyscall, (void *)&handleGetServiceSyscall, - (void *)&handleGetProviderSyscall, + (void *)&handleGetFunctionSyscall, (void *)&handleSubscribeInterruptSyscall, (void *)&handleCreateEventSyscall, (void *)&handleGetEventSyscall, diff --git a/src/userland/hlib/include/syscalls.h b/src/userland/hlib/include/syscalls.h index 0518986..bdcb8be 100644 --- a/src/userland/hlib/include/syscalls.h +++ b/src/userland/hlib/include/syscalls.h @@ -6,13 +6,13 @@ typedef enum { SYS_RUN = 0, - SYS_REGISTER_FUNCTION = 1, + SYS_CREATE_FUNCTION = 1, SYS_REQUEST = 2, SYS_IO_IN = 3, SYS_IO_OUT = 4, SYS_LOAD_INITRD = 5, SYS_GET_SERVICE = 6, - SYS_GET_PROVIDER = 7, + SYS_GET_FUNCTION = 7, SYS_SUBSCRIBE_INTERRUPT = 8, SYS_CREATE_EVENT = 9, SYS_GET_EVENT = 10, @@ -26,6 +26,6 @@ SYS_REQUEST_MEMORY = 18, } SyscallIds; -extern uint32_t getProvider(uint32_t module, char *name); +extern uint32_t getFunction(uint32_t module, char *name); #endif diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/kernel/syscalls/syscall.c b/src/kernel/syscalls/syscall.c index 3987d0f..9b7d63f 100644 --- a/src/kernel/syscalls/syscall.c +++ b/src/kernel/syscalls/syscall.c @@ -56,8 +56,8 @@ extern uintptr_t handleLoadFromInitrdSyscall; extern uintptr_t handleIOInSyscall, handleIOOutSyscall; -extern uintptr_t handleGetServiceIdSyscall, handleGetProviderSyscall, - handleGetServiceSyscall, handleInstallSyscall, handleRequestSyscall; +extern uintptr_t handleGetServiceIdSyscall, handleGetFunctionSyscall, + handleGetServiceSyscall, handleCreateFunctionSyscall, handleRequestSyscall; extern uintptr_t handleCreateEventSyscall, handleGetEventSyscall, handleFireEventSyscall, handleSubscribeEventSyscall; extern uintptr_t handleSubscribeInterruptSyscall; @@ -67,13 +67,13 @@ void (*syscallHandlers[])(Syscall *) = { 0, - (void *)&handleInstallSyscall, + (void *)&handleCreateFunctionSyscall, (void *)&handleRequestSyscall, (void *)&handleIOInSyscall, (void *)&handleIOOutSyscall, (void *)&handleLoadFromInitrdSyscall, (void *)&handleGetServiceSyscall, - (void *)&handleGetProviderSyscall, + (void *)&handleGetFunctionSyscall, (void *)&handleSubscribeInterruptSyscall, (void *)&handleCreateEventSyscall, (void *)&handleGetEventSyscall, diff --git a/src/userland/hlib/include/syscalls.h b/src/userland/hlib/include/syscalls.h index 0518986..bdcb8be 100644 --- a/src/userland/hlib/include/syscalls.h +++ b/src/userland/hlib/include/syscalls.h @@ -6,13 +6,13 @@ typedef enum { SYS_RUN = 0, - SYS_REGISTER_FUNCTION = 1, + SYS_CREATE_FUNCTION = 1, SYS_REQUEST = 2, SYS_IO_IN = 3, SYS_IO_OUT = 4, SYS_LOAD_INITRD = 5, SYS_GET_SERVICE = 6, - SYS_GET_PROVIDER = 7, + SYS_GET_FUNCTION = 7, SYS_SUBSCRIBE_INTERRUPT = 8, SYS_CREATE_EVENT = 9, SYS_GET_EVENT = 10, @@ -26,6 +26,6 @@ SYS_REQUEST_MEMORY = 18, } SyscallIds; -extern uint32_t getProvider(uint32_t module, char *name); +extern uint32_t getFunction(uint32_t module, char *name); #endif diff --git a/src/userland/hlib/main.c b/src/userland/hlib/main.c index d0fe4be..653de9d 100644 --- a/src/userland/hlib/main.c +++ b/src/userland/hlib/main.c @@ -32,7 +32,7 @@ void log(char *message) { if (logModule == 0) { logModule = getService("log"); - logProvider = getProvider(logModule, "log"); + logProvider = getFunction(logModule, "log"); } uintptr_t id = insertString(message); request(logModule, logProvider, id, 0); @@ -42,7 +42,7 @@ void requestName(char *service, char *provider, uintptr_t data1, uintptr_t data2) { uint32_t serviceId = getService(service); - uint32_t providerId = getProvider(serviceId, provider); + uint32_t providerId = getFunction(serviceId, provider); request(serviceId, providerId, data1, data2); } diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/kernel/syscalls/syscall.c b/src/kernel/syscalls/syscall.c index 3987d0f..9b7d63f 100644 --- a/src/kernel/syscalls/syscall.c +++ b/src/kernel/syscalls/syscall.c @@ -56,8 +56,8 @@ extern uintptr_t handleLoadFromInitrdSyscall; extern uintptr_t handleIOInSyscall, handleIOOutSyscall; -extern uintptr_t handleGetServiceIdSyscall, handleGetProviderSyscall, - handleGetServiceSyscall, handleInstallSyscall, handleRequestSyscall; +extern uintptr_t handleGetServiceIdSyscall, handleGetFunctionSyscall, + handleGetServiceSyscall, handleCreateFunctionSyscall, handleRequestSyscall; extern uintptr_t handleCreateEventSyscall, handleGetEventSyscall, handleFireEventSyscall, handleSubscribeEventSyscall; extern uintptr_t handleSubscribeInterruptSyscall; @@ -67,13 +67,13 @@ void (*syscallHandlers[])(Syscall *) = { 0, - (void *)&handleInstallSyscall, + (void *)&handleCreateFunctionSyscall, (void *)&handleRequestSyscall, (void *)&handleIOInSyscall, (void *)&handleIOOutSyscall, (void *)&handleLoadFromInitrdSyscall, (void *)&handleGetServiceSyscall, - (void *)&handleGetProviderSyscall, + (void *)&handleGetFunctionSyscall, (void *)&handleSubscribeInterruptSyscall, (void *)&handleCreateEventSyscall, (void *)&handleGetEventSyscall, diff --git a/src/userland/hlib/include/syscalls.h b/src/userland/hlib/include/syscalls.h index 0518986..bdcb8be 100644 --- a/src/userland/hlib/include/syscalls.h +++ b/src/userland/hlib/include/syscalls.h @@ -6,13 +6,13 @@ typedef enum { SYS_RUN = 0, - SYS_REGISTER_FUNCTION = 1, + SYS_CREATE_FUNCTION = 1, SYS_REQUEST = 2, SYS_IO_IN = 3, SYS_IO_OUT = 4, SYS_LOAD_INITRD = 5, SYS_GET_SERVICE = 6, - SYS_GET_PROVIDER = 7, + SYS_GET_FUNCTION = 7, SYS_SUBSCRIBE_INTERRUPT = 8, SYS_CREATE_EVENT = 9, SYS_GET_EVENT = 10, @@ -26,6 +26,6 @@ SYS_REQUEST_MEMORY = 18, } SyscallIds; -extern uint32_t getProvider(uint32_t module, char *name); +extern uint32_t getFunction(uint32_t module, char *name); #endif diff --git a/src/userland/hlib/main.c b/src/userland/hlib/main.c index d0fe4be..653de9d 100644 --- a/src/userland/hlib/main.c +++ b/src/userland/hlib/main.c @@ -32,7 +32,7 @@ void log(char *message) { if (logModule == 0) { logModule = getService("log"); - logProvider = getProvider(logModule, "log"); + logProvider = getFunction(logModule, "log"); } uintptr_t id = insertString(message); request(logModule, logProvider, id, 0); @@ -42,7 +42,7 @@ void requestName(char *service, char *provider, uintptr_t data1, uintptr_t data2) { uint32_t serviceId = getService(service); - uint32_t providerId = getProvider(serviceId, provider); + uint32_t providerId = getFunction(serviceId, provider); request(serviceId, providerId, data1, data2); } diff --git a/src/userland/hlib/service/service.c b/src/userland/hlib/service/service.c index 05000ab..7707fe1 100644 --- a/src/userland/hlib/service/service.c +++ b/src/userland/hlib/service/service.c @@ -2,15 +2,14 @@ #include #include -void request(uint32_t module, uint32_t function, uintptr_t data1, +void request(uint32_t service, uint32_t function, uintptr_t data1, uintptr_t data2) { - syscall(SYS_REQUEST, module, function, data1, data2); + syscall(SYS_REQUEST, service, function, data1, data2); } -uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)) { +uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)) { uintptr_t id = insertString(name); - return syscall(SYS_REGISTER_FUNCTION, id, U32(provider), 0, 0); + return syscall(SYS_CREATE_FUNCTION, id, U32(handler), 0, 0); } uint32_t getService(char *name) { @@ -18,9 +17,9 @@ return syscall(SYS_GET_SERVICE, id, 0, 0, 0); } -uint32_t getProvider(uint32_t module, char *name) { +uint32_t getFunction(uint32_t module, char *name) { uintptr_t id = insertString(name); - return syscall(SYS_GET_PROVIDER, module, id, 0, 0); + return syscall(SYS_GET_FUNCTION, module, id, 0, 0); } uint32_t getServiceId() { return syscall(SYS_GET_SERVICE_ID, 0, 0, 0, 0); } diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/kernel/syscalls/syscall.c b/src/kernel/syscalls/syscall.c index 3987d0f..9b7d63f 100644 --- a/src/kernel/syscalls/syscall.c +++ b/src/kernel/syscalls/syscall.c @@ -56,8 +56,8 @@ extern uintptr_t handleLoadFromInitrdSyscall; extern uintptr_t handleIOInSyscall, handleIOOutSyscall; -extern uintptr_t handleGetServiceIdSyscall, handleGetProviderSyscall, - handleGetServiceSyscall, handleInstallSyscall, handleRequestSyscall; +extern uintptr_t handleGetServiceIdSyscall, handleGetFunctionSyscall, + handleGetServiceSyscall, handleCreateFunctionSyscall, handleRequestSyscall; extern uintptr_t handleCreateEventSyscall, handleGetEventSyscall, handleFireEventSyscall, handleSubscribeEventSyscall; extern uintptr_t handleSubscribeInterruptSyscall; @@ -67,13 +67,13 @@ void (*syscallHandlers[])(Syscall *) = { 0, - (void *)&handleInstallSyscall, + (void *)&handleCreateFunctionSyscall, (void *)&handleRequestSyscall, (void *)&handleIOInSyscall, (void *)&handleIOOutSyscall, (void *)&handleLoadFromInitrdSyscall, (void *)&handleGetServiceSyscall, - (void *)&handleGetProviderSyscall, + (void *)&handleGetFunctionSyscall, (void *)&handleSubscribeInterruptSyscall, (void *)&handleCreateEventSyscall, (void *)&handleGetEventSyscall, diff --git a/src/userland/hlib/include/syscalls.h b/src/userland/hlib/include/syscalls.h index 0518986..bdcb8be 100644 --- a/src/userland/hlib/include/syscalls.h +++ b/src/userland/hlib/include/syscalls.h @@ -6,13 +6,13 @@ typedef enum { SYS_RUN = 0, - SYS_REGISTER_FUNCTION = 1, + SYS_CREATE_FUNCTION = 1, SYS_REQUEST = 2, SYS_IO_IN = 3, SYS_IO_OUT = 4, SYS_LOAD_INITRD = 5, SYS_GET_SERVICE = 6, - SYS_GET_PROVIDER = 7, + SYS_GET_FUNCTION = 7, SYS_SUBSCRIBE_INTERRUPT = 8, SYS_CREATE_EVENT = 9, SYS_GET_EVENT = 10, @@ -26,6 +26,6 @@ SYS_REQUEST_MEMORY = 18, } SyscallIds; -extern uint32_t getProvider(uint32_t module, char *name); +extern uint32_t getFunction(uint32_t module, char *name); #endif diff --git a/src/userland/hlib/main.c b/src/userland/hlib/main.c index d0fe4be..653de9d 100644 --- a/src/userland/hlib/main.c +++ b/src/userland/hlib/main.c @@ -32,7 +32,7 @@ void log(char *message) { if (logModule == 0) { logModule = getService("log"); - logProvider = getProvider(logModule, "log"); + logProvider = getFunction(logModule, "log"); } uintptr_t id = insertString(message); request(logModule, logProvider, id, 0); @@ -42,7 +42,7 @@ void requestName(char *service, char *provider, uintptr_t data1, uintptr_t data2) { uint32_t serviceId = getService(service); - uint32_t providerId = getProvider(serviceId, provider); + uint32_t providerId = getFunction(serviceId, provider); request(serviceId, providerId, data1, data2); } diff --git a/src/userland/hlib/service/service.c b/src/userland/hlib/service/service.c index 05000ab..7707fe1 100644 --- a/src/userland/hlib/service/service.c +++ b/src/userland/hlib/service/service.c @@ -2,15 +2,14 @@ #include #include -void request(uint32_t module, uint32_t function, uintptr_t data1, +void request(uint32_t service, uint32_t function, uintptr_t data1, uintptr_t data2) { - syscall(SYS_REQUEST, module, function, data1, data2); + syscall(SYS_REQUEST, service, function, data1, data2); } -uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)) { +uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)) { uintptr_t id = insertString(name); - return syscall(SYS_REGISTER_FUNCTION, id, U32(provider), 0, 0); + return syscall(SYS_CREATE_FUNCTION, id, U32(handler), 0, 0); } uint32_t getService(char *name) { @@ -18,9 +17,9 @@ return syscall(SYS_GET_SERVICE, id, 0, 0, 0); } -uint32_t getProvider(uint32_t module, char *name) { +uint32_t getFunction(uint32_t module, char *name) { uintptr_t id = insertString(name); - return syscall(SYS_GET_PROVIDER, module, id, 0, 0); + return syscall(SYS_GET_FUNCTION, module, id, 0, 0); } uint32_t getServiceId() { return syscall(SYS_GET_SERVICE_ID, 0, 0, 0, 0); } diff --git a/src/userland/log/main.c b/src/userland/log/main.c index 1ab0851..6e5f629 100644 --- a/src/userland/log/main.c +++ b/src/userland/log/main.c @@ -51,8 +51,8 @@ } int32_t main() { - installServiceProvider("log", (void *)handleLog); - installServiceProvider("registerOut", (void *)registerOut); + createFunction("log", (void *)handleLog); + createFunction("registerOut", (void *)registerOut); uint32_t eventId = getEvent(0, "loadInitrd"); subscribeEvent(0, eventId, (void *)onInitrdLoad); return 0; diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/kernel/syscalls/syscall.c b/src/kernel/syscalls/syscall.c index 3987d0f..9b7d63f 100644 --- a/src/kernel/syscalls/syscall.c +++ b/src/kernel/syscalls/syscall.c @@ -56,8 +56,8 @@ extern uintptr_t handleLoadFromInitrdSyscall; extern uintptr_t handleIOInSyscall, handleIOOutSyscall; -extern uintptr_t handleGetServiceIdSyscall, handleGetProviderSyscall, - handleGetServiceSyscall, handleInstallSyscall, handleRequestSyscall; +extern uintptr_t handleGetServiceIdSyscall, handleGetFunctionSyscall, + handleGetServiceSyscall, handleCreateFunctionSyscall, handleRequestSyscall; extern uintptr_t handleCreateEventSyscall, handleGetEventSyscall, handleFireEventSyscall, handleSubscribeEventSyscall; extern uintptr_t handleSubscribeInterruptSyscall; @@ -67,13 +67,13 @@ void (*syscallHandlers[])(Syscall *) = { 0, - (void *)&handleInstallSyscall, + (void *)&handleCreateFunctionSyscall, (void *)&handleRequestSyscall, (void *)&handleIOInSyscall, (void *)&handleIOOutSyscall, (void *)&handleLoadFromInitrdSyscall, (void *)&handleGetServiceSyscall, - (void *)&handleGetProviderSyscall, + (void *)&handleGetFunctionSyscall, (void *)&handleSubscribeInterruptSyscall, (void *)&handleCreateEventSyscall, (void *)&handleGetEventSyscall, diff --git a/src/userland/hlib/include/syscalls.h b/src/userland/hlib/include/syscalls.h index 0518986..bdcb8be 100644 --- a/src/userland/hlib/include/syscalls.h +++ b/src/userland/hlib/include/syscalls.h @@ -6,13 +6,13 @@ typedef enum { SYS_RUN = 0, - SYS_REGISTER_FUNCTION = 1, + SYS_CREATE_FUNCTION = 1, SYS_REQUEST = 2, SYS_IO_IN = 3, SYS_IO_OUT = 4, SYS_LOAD_INITRD = 5, SYS_GET_SERVICE = 6, - SYS_GET_PROVIDER = 7, + SYS_GET_FUNCTION = 7, SYS_SUBSCRIBE_INTERRUPT = 8, SYS_CREATE_EVENT = 9, SYS_GET_EVENT = 10, @@ -26,6 +26,6 @@ SYS_REQUEST_MEMORY = 18, } SyscallIds; -extern uint32_t getProvider(uint32_t module, char *name); +extern uint32_t getFunction(uint32_t module, char *name); #endif diff --git a/src/userland/hlib/main.c b/src/userland/hlib/main.c index d0fe4be..653de9d 100644 --- a/src/userland/hlib/main.c +++ b/src/userland/hlib/main.c @@ -32,7 +32,7 @@ void log(char *message) { if (logModule == 0) { logModule = getService("log"); - logProvider = getProvider(logModule, "log"); + logProvider = getFunction(logModule, "log"); } uintptr_t id = insertString(message); request(logModule, logProvider, id, 0); @@ -42,7 +42,7 @@ void requestName(char *service, char *provider, uintptr_t data1, uintptr_t data2) { uint32_t serviceId = getService(service); - uint32_t providerId = getProvider(serviceId, provider); + uint32_t providerId = getFunction(serviceId, provider); request(serviceId, providerId, data1, data2); } diff --git a/src/userland/hlib/service/service.c b/src/userland/hlib/service/service.c index 05000ab..7707fe1 100644 --- a/src/userland/hlib/service/service.c +++ b/src/userland/hlib/service/service.c @@ -2,15 +2,14 @@ #include #include -void request(uint32_t module, uint32_t function, uintptr_t data1, +void request(uint32_t service, uint32_t function, uintptr_t data1, uintptr_t data2) { - syscall(SYS_REQUEST, module, function, data1, data2); + syscall(SYS_REQUEST, service, function, data1, data2); } -uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)) { +uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)) { uintptr_t id = insertString(name); - return syscall(SYS_REGISTER_FUNCTION, id, U32(provider), 0, 0); + return syscall(SYS_CREATE_FUNCTION, id, U32(handler), 0, 0); } uint32_t getService(char *name) { @@ -18,9 +17,9 @@ return syscall(SYS_GET_SERVICE, id, 0, 0, 0); } -uint32_t getProvider(uint32_t module, char *name) { +uint32_t getFunction(uint32_t module, char *name) { uintptr_t id = insertString(name); - return syscall(SYS_GET_PROVIDER, module, id, 0, 0); + return syscall(SYS_GET_FUNCTION, module, id, 0, 0); } uint32_t getServiceId() { return syscall(SYS_GET_SERVICE_ID, 0, 0, 0, 0); } diff --git a/src/userland/log/main.c b/src/userland/log/main.c index 1ab0851..6e5f629 100644 --- a/src/userland/log/main.c +++ b/src/userland/log/main.c @@ -51,8 +51,8 @@ } int32_t main() { - installServiceProvider("log", (void *)handleLog); - installServiceProvider("registerOut", (void *)registerOut); + createFunction("log", (void *)handleLog); + createFunction("registerOut", (void *)registerOut); uint32_t eventId = getEvent(0, "loadInitrd"); subscribeEvent(0, eventId, (void *)onInitrdLoad); return 0; diff --git a/src/userland/parallel/main.c b/src/userland/parallel/main.c index 0db0671..0403682 100644 --- a/src/userland/parallel/main.c +++ b/src/userland/parallel/main.c @@ -21,8 +21,8 @@ } int32_t main() { - uint32_t provider = installServiceProvider("out", (void *)parallelOut); - installServiceProvider("writeParallel", (void *)parallelOut); + uint32_t provider = createFunction("out", (void *)parallelOut); + createFunction("writeParallel", (void *)parallelOut); event0 = createEvent("in"); event1 = createEvent("parallelIn"); uint32_t thisService = getServiceId(); diff --git a/src/include/hlib.h b/src/include/hlib.h index 6514717..7060fc5 100644 --- a/src/include/hlib.h +++ b/src/include/hlib.h @@ -11,8 +11,7 @@ #define NULL PTR(0) -extern uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)); +extern uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)); extern uint32_t strlen(char *string); extern uint32_t ioIn(uint16_t port, uint8_t size); extern void ioOut(uint16_t port, uint32_t value, uint8_t size); diff --git a/src/kernel/include/service.h b/src/kernel/include/service.h index 46302e8..617e50c 100644 --- a/src/kernel/include/service.h +++ b/src/kernel/include/service.h @@ -9,7 +9,7 @@ PagingInfo pagingInfo; char *name; uintptr_t nameHash; - ListElement *providers; + ListElement *functions; ListElement *events; } Service; @@ -18,7 +18,7 @@ char *name; void *address; Service *service; -} Provider; +} ServiceFunction; typedef struct { char *name; @@ -33,9 +33,9 @@ extern void *runEnd; extern Service *findService(char *); -extern Provider *findProvider(Service *, char *); +extern ServiceFunction *findFunction(Service *, char *); extern Service *currentService; -extern void scheduleProvider(Provider *provider, uintptr_t data1, +extern void scheduleFunction(ServiceFunction *provider, uintptr_t data1, uintptr_t data2, uintptr_t data3, Syscall *respondingTo); extern void fireEvent(Event *event, uint32_t data1); diff --git a/src/kernel/interrupts/interrupts.c b/src/kernel/interrupts/interrupts.c index 054896e..c40ecee 100644 --- a/src/kernel/interrupts/interrupts.c +++ b/src/kernel/interrupts/interrupts.c @@ -21,8 +21,8 @@ void onInterrupt(void *eip, void *esp, uint32_t intNo, void *cr3) { // an external interrupt was triggered - foreach (interruptSubscriptions[intNo], Provider *, provider, - { scheduleProvider(provider, intNo, 0, 0, NULL); }) + foreach (interruptSubscriptions[intNo], ServiceFunction *, provider, + { scheduleFunction(provider, intNo, 0, 0, NULL); }) ; if (cr3 == PTR(0x500000)) { // interrupt was triggered while the kernel was doing stuff @@ -88,7 +88,7 @@ } void handleSubscribeInterruptSyscall(Syscall *call) { - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); Service *service = call->service; char *providerName = "INTERRUPT"; provider->name = providerName; diff --git a/src/kernel/main.c b/src/kernel/main.c index ea08335..dd53e59 100644 --- a/src/kernel/main.c +++ b/src/kernel/main.c @@ -24,8 +24,8 @@ Service *loadProgram(char *name, Syscall *respondingTo) { Service *service = readInitrdProgram(name); - Provider *provider = findProvider(service, "main"); - scheduleProvider(provider, 0, 0, 0, respondingTo); + ServiceFunction *provider = findFunction(service, "main"); + scheduleFunction(provider, 0, 0, 0, respondingTo); return service; } diff --git a/src/kernel/service/eventSyscalls.c b/src/kernel/service/eventSyscalls.c index 77f90d2..1219142 100644 --- a/src/kernel/service/eventSyscalls.c +++ b/src/kernel/service/eventSyscalls.c @@ -7,7 +7,7 @@ if (!name) { return; } - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); Service *service = call->service; event->subscriptions = NULL; event->name = name; @@ -52,7 +52,7 @@ } Event *event = listGet(list, call->parameters[1]); Service *eventService = listGet(services, call->parameters[0]); - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *provider = malloc(sizeof(ServiceFunction)); provider->name = "event subscription"; provider->service = call->service; provider->address = PTR(call->parameters[2]); diff --git a/src/kernel/service/events.c b/src/kernel/service/events.c index e304177..6e9f2f3 100644 --- a/src/kernel/service/events.c +++ b/src/kernel/service/events.c @@ -6,7 +6,7 @@ Event *loadInitrdEvent, *crashEvent; Event *createKernelEvent(char *name) { - Event *event = malloc(sizeof(Provider)); + Event *event = malloc(sizeof(ServiceFunction)); event->subscriptions = NULL; event->name = name; listAdd(&kernelEvents, event); @@ -14,8 +14,8 @@ } void fireEvent(Event *event, uint32_t data1) { - foreach (event->subscriptions, Provider *, provider, - { scheduleProvider(provider, data1, 0, 0, 0); }) + foreach (event->subscriptions, ServiceFunction *, function, + { scheduleFunction(function, data1, 0, 0, 0); }) ; } diff --git a/src/kernel/service/service.c b/src/kernel/service/service.c index e77de8a..f4923a0 100644 --- a/src/kernel/service/service.c +++ b/src/kernel/service/service.c @@ -63,12 +63,12 @@ end: programHeader = (void *)programHeader + header->programHeaderEntrySize; } - Provider *main = malloc(sizeof(Provider)); + ServiceFunction *main = malloc(sizeof(ServiceFunction)); main->name = "main"; main->service = service; main->address = PTR(header->entryPosition); listAdd(&services, service); - listAdd(&service->providers, main); + listAdd(&service->functions, main); return service; } @@ -82,8 +82,8 @@ return NULL; } -Provider *findProvider(Service *service, char *name) { - foreach (service->providers, Provider *, provider, { +ServiceFunction *findFunction(Service *service, char *name) { + foreach (service->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { return provider; } @@ -92,8 +92,8 @@ return NULL; } -void scheduleProvider(Provider *provider, uintptr_t data1, uintptr_t data2, - uintptr_t data3, Syscall *respondingTo) { +void scheduleFunction(ServiceFunction *provider, uintptr_t data1, + uintptr_t data2, uintptr_t data3, Syscall *respondingTo) { Syscall *runCall = malloc(sizeof(Syscall)); runCall->function = 0; runCall->esp = malloc(0x1000); // todo: free this diff --git a/src/kernel/service/serviceSyscalls.c b/src/kernel/service/serviceSyscalls.c index d509a44..803e1be 100644 --- a/src/kernel/service/serviceSyscalls.c +++ b/src/kernel/service/serviceSyscalls.c @@ -31,7 +31,7 @@ ; } -void handleGetProviderSyscall(Syscall *call) { +void handleGetFunctionSyscall(Syscall *call) { uint32_t i = 0; Service *callService = call->service; char *name = retrieveString(call->parameters[1]); @@ -39,7 +39,7 @@ return; } Service *providerService = listGet(services, call->parameters[0]); - foreach (providerService->providers, Provider *, provider, { + foreach (providerService->functions, ServiceFunction *, provider, { if (stringEquals(provider->name, name)) { call->returnValue = i; return; @@ -49,26 +49,26 @@ ; } -void handleInstallSyscall(Syscall *call) { +void handleCreateFunctionSyscall(Syscall *call) { char *name = retrieveString(call->parameters[0]); if (!name) { return; } - Provider *provider = malloc(sizeof(Provider)); + ServiceFunction *function = malloc(sizeof(ServiceFunction)); Service *service = call->service; - provider->name = name; - provider->address = PTR(call->parameters[1]); - provider->service = call->service; - call->returnValue = listCount(service->providers); - listAdd(&service->providers, provider); + function->name = name; + function->address = PTR(call->parameters[1]); + function->service = call->service; + call->returnValue = listCount(service->functions); + listAdd(&service->functions, function); } void handleRequestSyscall(Syscall *call) { Service *service = call->service; Service *providerService = listGet(services, call->parameters[0]); - Provider *provider = - listGet(providerService->providers, call->parameters[1]); - scheduleProvider(provider, call->parameters[2], call->parameters[3], + ServiceFunction *function = + listGet(providerService->functions, call->parameters[1]); + scheduleFunction(function, call->parameters[2], call->parameters[3], service->nameHash, call); call->avoidReschedule = true; } diff --git a/src/kernel/syscalls/syscall.c b/src/kernel/syscalls/syscall.c index 3987d0f..9b7d63f 100644 --- a/src/kernel/syscalls/syscall.c +++ b/src/kernel/syscalls/syscall.c @@ -56,8 +56,8 @@ extern uintptr_t handleLoadFromInitrdSyscall; extern uintptr_t handleIOInSyscall, handleIOOutSyscall; -extern uintptr_t handleGetServiceIdSyscall, handleGetProviderSyscall, - handleGetServiceSyscall, handleInstallSyscall, handleRequestSyscall; +extern uintptr_t handleGetServiceIdSyscall, handleGetFunctionSyscall, + handleGetServiceSyscall, handleCreateFunctionSyscall, handleRequestSyscall; extern uintptr_t handleCreateEventSyscall, handleGetEventSyscall, handleFireEventSyscall, handleSubscribeEventSyscall; extern uintptr_t handleSubscribeInterruptSyscall; @@ -67,13 +67,13 @@ void (*syscallHandlers[])(Syscall *) = { 0, - (void *)&handleInstallSyscall, + (void *)&handleCreateFunctionSyscall, (void *)&handleRequestSyscall, (void *)&handleIOInSyscall, (void *)&handleIOOutSyscall, (void *)&handleLoadFromInitrdSyscall, (void *)&handleGetServiceSyscall, - (void *)&handleGetProviderSyscall, + (void *)&handleGetFunctionSyscall, (void *)&handleSubscribeInterruptSyscall, (void *)&handleCreateEventSyscall, (void *)&handleGetEventSyscall, diff --git a/src/userland/hlib/include/syscalls.h b/src/userland/hlib/include/syscalls.h index 0518986..bdcb8be 100644 --- a/src/userland/hlib/include/syscalls.h +++ b/src/userland/hlib/include/syscalls.h @@ -6,13 +6,13 @@ typedef enum { SYS_RUN = 0, - SYS_REGISTER_FUNCTION = 1, + SYS_CREATE_FUNCTION = 1, SYS_REQUEST = 2, SYS_IO_IN = 3, SYS_IO_OUT = 4, SYS_LOAD_INITRD = 5, SYS_GET_SERVICE = 6, - SYS_GET_PROVIDER = 7, + SYS_GET_FUNCTION = 7, SYS_SUBSCRIBE_INTERRUPT = 8, SYS_CREATE_EVENT = 9, SYS_GET_EVENT = 10, @@ -26,6 +26,6 @@ SYS_REQUEST_MEMORY = 18, } SyscallIds; -extern uint32_t getProvider(uint32_t module, char *name); +extern uint32_t getFunction(uint32_t module, char *name); #endif diff --git a/src/userland/hlib/main.c b/src/userland/hlib/main.c index d0fe4be..653de9d 100644 --- a/src/userland/hlib/main.c +++ b/src/userland/hlib/main.c @@ -32,7 +32,7 @@ void log(char *message) { if (logModule == 0) { logModule = getService("log"); - logProvider = getProvider(logModule, "log"); + logProvider = getFunction(logModule, "log"); } uintptr_t id = insertString(message); request(logModule, logProvider, id, 0); @@ -42,7 +42,7 @@ void requestName(char *service, char *provider, uintptr_t data1, uintptr_t data2) { uint32_t serviceId = getService(service); - uint32_t providerId = getProvider(serviceId, provider); + uint32_t providerId = getFunction(serviceId, provider); request(serviceId, providerId, data1, data2); } diff --git a/src/userland/hlib/service/service.c b/src/userland/hlib/service/service.c index 05000ab..7707fe1 100644 --- a/src/userland/hlib/service/service.c +++ b/src/userland/hlib/service/service.c @@ -2,15 +2,14 @@ #include #include -void request(uint32_t module, uint32_t function, uintptr_t data1, +void request(uint32_t service, uint32_t function, uintptr_t data1, uintptr_t data2) { - syscall(SYS_REQUEST, module, function, data1, data2); + syscall(SYS_REQUEST, service, function, data1, data2); } -uint32_t installServiceProvider(char *name, - int32_t(provider)(void *, uint32_t)) { +uint32_t createFunction(char *name, int32_t(handler)(void *, uint32_t)) { uintptr_t id = insertString(name); - return syscall(SYS_REGISTER_FUNCTION, id, U32(provider), 0, 0); + return syscall(SYS_CREATE_FUNCTION, id, U32(handler), 0, 0); } uint32_t getService(char *name) { @@ -18,9 +17,9 @@ return syscall(SYS_GET_SERVICE, id, 0, 0, 0); } -uint32_t getProvider(uint32_t module, char *name) { +uint32_t getFunction(uint32_t module, char *name) { uintptr_t id = insertString(name); - return syscall(SYS_GET_PROVIDER, module, id, 0, 0); + return syscall(SYS_GET_FUNCTION, module, id, 0, 0); } uint32_t getServiceId() { return syscall(SYS_GET_SERVICE_ID, 0, 0, 0, 0); } diff --git a/src/userland/log/main.c b/src/userland/log/main.c index 1ab0851..6e5f629 100644 --- a/src/userland/log/main.c +++ b/src/userland/log/main.c @@ -51,8 +51,8 @@ } int32_t main() { - installServiceProvider("log", (void *)handleLog); - installServiceProvider("registerOut", (void *)registerOut); + createFunction("log", (void *)handleLog); + createFunction("registerOut", (void *)registerOut); uint32_t eventId = getEvent(0, "loadInitrd"); subscribeEvent(0, eventId, (void *)onInitrdLoad); return 0; diff --git a/src/userland/parallel/main.c b/src/userland/parallel/main.c index 0db0671..0403682 100644 --- a/src/userland/parallel/main.c +++ b/src/userland/parallel/main.c @@ -21,8 +21,8 @@ } int32_t main() { - uint32_t provider = installServiceProvider("out", (void *)parallelOut); - installServiceProvider("writeParallel", (void *)parallelOut); + uint32_t provider = createFunction("out", (void *)parallelOut); + createFunction("writeParallel", (void *)parallelOut); event0 = createEvent("in"); event1 = createEvent("parallelIn"); uint32_t thisService = getServiceId(); diff --git a/src/userland/vga/main.c b/src/userland/vga/main.c index 949916c..57ffe05 100644 --- a/src/userland/vga/main.c +++ b/src/userland/vga/main.c @@ -29,7 +29,7 @@ int32_t main() { videoSource = requestMemory(2, NULL, PTR(0xB8000)); uint32_t thisService = getServiceId(); - uint32_t functionId = installServiceProvider("writeVGA", (void *)write); + uint32_t functionId = createFunction("writeVGA", (void *)write); requestName("log", "registerOut", thisService, functionId); return 0; }