Browse Source

Implement module loading. Move drivers into modules. Fix bugs.

coderain 6 years ago
parent
commit
876bb4f27f
100 changed files with 131 additions and 2 deletions
  1. 2 0
      .gitignore
  2. 8 2
      Makefile
  3. 5 0
      drivers/.gitignore
  4. 38 0
      drivers/Makefile
  5. 78 0
      drivers/acpica/Makefile
  6. 0 0
      drivers/acpica/include/acapps.h
  7. 0 0
      drivers/acpica/include/acbuffer.h
  8. 0 0
      drivers/acpica/include/acclib.h
  9. 0 0
      drivers/acpica/include/accommon.h
  10. 0 0
      drivers/acpica/include/acconfig.h
  11. 0 0
      drivers/acpica/include/acdebug.h
  12. 0 0
      drivers/acpica/include/acdisasm.h
  13. 0 0
      drivers/acpica/include/acdispat.h
  14. 0 0
      drivers/acpica/include/acevents.h
  15. 0 0
      drivers/acpica/include/acexcep.h
  16. 0 0
      drivers/acpica/include/acglobal.h
  17. 0 0
      drivers/acpica/include/achware.h
  18. 0 0
      drivers/acpica/include/acinterp.h
  19. 0 0
      drivers/acpica/include/aclocal.h
  20. 0 0
      drivers/acpica/include/acmacros.h
  21. 0 0
      drivers/acpica/include/acnames.h
  22. 0 0
      drivers/acpica/include/acnamesp.h
  23. 0 0
      drivers/acpica/include/acobject.h
  24. 0 0
      drivers/acpica/include/acopcode.h
  25. 0 0
      drivers/acpica/include/acoutput.h
  26. 0 0
      drivers/acpica/include/acparser.h
  27. 0 0
      drivers/acpica/include/acpi.h
  28. 0 0
      drivers/acpica/include/acpiosxf.h
  29. 0 0
      drivers/acpica/include/acpixf.h
  30. 0 0
      drivers/acpica/include/acpredef.h
  31. 0 0
      drivers/acpica/include/acresrc.h
  32. 0 0
      drivers/acpica/include/acrestyp.h
  33. 0 0
      drivers/acpica/include/acstruct.h
  34. 0 0
      drivers/acpica/include/actables.h
  35. 0 0
      drivers/acpica/include/actbl.h
  36. 0 0
      drivers/acpica/include/actbl1.h
  37. 0 0
      drivers/acpica/include/actbl2.h
  38. 0 0
      drivers/acpica/include/actbl3.h
  39. 0 0
      drivers/acpica/include/actypes.h
  40. 0 0
      drivers/acpica/include/acutils.h
  41. 0 0
      drivers/acpica/include/acuuid.h
  42. 0 0
      drivers/acpica/include/amlcode.h
  43. 0 0
      drivers/acpica/include/amlresrc.h
  44. 0 0
      drivers/acpica/include/platform/acenv.h
  45. 0 0
      drivers/acpica/include/platform/acenvex.h
  46. 0 0
      drivers/acpica/include/platform/acgcc.h
  47. 0 0
      drivers/acpica/include/platform/acmnlth.h
  48. 0 0
      drivers/acpica/src/dispatcher/dsargs.c
  49. 0 0
      drivers/acpica/src/dispatcher/dscontrol.c
  50. 0 0
      drivers/acpica/src/dispatcher/dsdebug.c
  51. 0 0
      drivers/acpica/src/dispatcher/dsfield.c
  52. 0 0
      drivers/acpica/src/dispatcher/dsinit.c
  53. 0 0
      drivers/acpica/src/dispatcher/dsmethod.c
  54. 0 0
      drivers/acpica/src/dispatcher/dsmthdat.c
  55. 0 0
      drivers/acpica/src/dispatcher/dsobject.c
  56. 0 0
      drivers/acpica/src/dispatcher/dsopcode.c
  57. 0 0
      drivers/acpica/src/dispatcher/dsutils.c
  58. 0 0
      drivers/acpica/src/dispatcher/dswexec.c
  59. 0 0
      drivers/acpica/src/dispatcher/dswload.c
  60. 0 0
      drivers/acpica/src/dispatcher/dswload2.c
  61. 0 0
      drivers/acpica/src/dispatcher/dswscope.c
  62. 0 0
      drivers/acpica/src/dispatcher/dswstate.c
  63. 0 0
      drivers/acpica/src/events/evevent.c
  64. 0 0
      drivers/acpica/src/events/evglock.c
  65. 0 0
      drivers/acpica/src/events/evgpe.c
  66. 0 0
      drivers/acpica/src/events/evgpeblk.c
  67. 0 0
      drivers/acpica/src/events/evgpeinit.c
  68. 0 0
      drivers/acpica/src/events/evgpeutil.c
  69. 0 0
      drivers/acpica/src/events/evhandler.c
  70. 0 0
      drivers/acpica/src/events/evmisc.c
  71. 0 0
      drivers/acpica/src/events/evregion.c
  72. 0 0
      drivers/acpica/src/events/evrgnini.c
  73. 0 0
      drivers/acpica/src/events/evsci.c
  74. 0 0
      drivers/acpica/src/events/evxface.c
  75. 0 0
      drivers/acpica/src/events/evxfevnt.c
  76. 0 0
      drivers/acpica/src/events/evxfgpe.c
  77. 0 0
      drivers/acpica/src/events/evxfregn.c
  78. 0 0
      drivers/acpica/src/executer/exconfig.c
  79. 0 0
      drivers/acpica/src/executer/exconvrt.c
  80. 0 0
      drivers/acpica/src/executer/excreate.c
  81. 0 0
      drivers/acpica/src/executer/exdebug.c
  82. 0 0
      drivers/acpica/src/executer/exdump.c
  83. 0 0
      drivers/acpica/src/executer/exfield.c
  84. 0 0
      drivers/acpica/src/executer/exfldio.c
  85. 0 0
      drivers/acpica/src/executer/exmisc.c
  86. 0 0
      drivers/acpica/src/executer/exmutex.c
  87. 0 0
      drivers/acpica/src/executer/exnames.c
  88. 0 0
      drivers/acpica/src/executer/exoparg1.c
  89. 0 0
      drivers/acpica/src/executer/exoparg2.c
  90. 0 0
      drivers/acpica/src/executer/exoparg3.c
  91. 0 0
      drivers/acpica/src/executer/exoparg6.c
  92. 0 0
      drivers/acpica/src/executer/exprep.c
  93. 0 0
      drivers/acpica/src/executer/exregion.c
  94. 0 0
      drivers/acpica/src/executer/exresnte.c
  95. 0 0
      drivers/acpica/src/executer/exresolv.c
  96. 0 0
      drivers/acpica/src/executer/exresop.c
  97. 0 0
      drivers/acpica/src/executer/exstore.c
  98. 0 0
      drivers/acpica/src/executer/exstoren.c
  99. 0 0
      drivers/acpica/src/executer/exstorob.c
  100. 0 0
      drivers/acpica/src/executer/exsystem.c

+ 2 - 0
.gitignore

@@ -16,6 +16,8 @@
 !tests/*
 !manager
 !manager/*
+!drivers
+!drivers/**
 !sdk
 !sdk/*
 !syscalls.awk

+ 8 - 2
Makefile

@@ -1,4 +1,4 @@
-.PHONY: all clean crt kernel library manager tests generate
+.PHONY: all clean crt kernel drivers library manager tests generate
 
 GENERATED_SOURCES = sdk/syscall_enum.h kernel/src/syscall_table.inl library/src/wrappers.c
 
@@ -10,6 +10,9 @@ crt:
 kernel: generate crt
 	$(MAKE) -C kernel all
 
+drivers: kernel
+	$(MAKE) -C drivers all
+
 library: generate crt
 	$(MAKE) -C library all
 
@@ -29,9 +32,11 @@ kernel/src/syscall_table.inl: sdk/syscall_enum.h
 
 library/src/wrappers.c: sdk/syscall_enum.h
 
-livecd.iso: kernel library manager
+livecd.iso: kernel drivers library manager
 	mkdir -p livecd/boot/grub
 	cp kernel/monolithium livecd/boot/monolithium
+	mkdir -p livecd/boot/drivers
+	find drivers -type f -name '*.drv' -exec cp {} livecd/boot/drivers/ \;
 	cp manager/manager livecd/manager
 	cp grub.cfg livecd/boot/grub/grub.cfg
 	grub-mkrescue -o $@ livecd
@@ -39,6 +44,7 @@ livecd.iso: kernel library manager
 clean:
 	$(MAKE) -C crt clean
 	$(MAKE) -C kernel clean
+	$(MAKE) -C drivers clean
 	$(MAKE) -C library clean
 	$(MAKE) -C manager clean
 	$(MAKE) -C tests clean

+ 5 - 0
drivers/.gitignore

@@ -0,0 +1,5 @@
+# Ignore output files
+
+*/obj
+*/dep
+*/*.drv

+ 38 - 0
drivers/Makefile

@@ -0,0 +1,38 @@
+#
+# Makefile
+#
+# Copyright (C) 2018 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+all:
+	$(MAKE) -C acpica all
+	$(MAKE) -C fatfs all
+	$(MAKE) -C floppy all
+	$(MAKE) -C ps2 all
+	$(MAKE) -C ramfs all
+	$(MAKE) -C serial all
+	$(MAKE) -C speaker all
+	$(MAKE) -C vesa all
+
+clean:
+	$(MAKE) -C acpica clean
+	$(MAKE) -C fatfs clean
+	$(MAKE) -C floppy clean
+	$(MAKE) -C ps2 clean
+	$(MAKE) -C ramfs clean
+	$(MAKE) -C serial clean
+	$(MAKE) -C speaker clean
+	$(MAKE) -C vesa clean

+ 78 - 0
drivers/acpica/Makefile

@@ -0,0 +1,78 @@
+#
+# Makefile
+#
+# Copyright (C) 2018 Aleksandar Andrejevic <theflash@sdf.lonestar.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as
+# published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+
+# Settings
+DEBUG  = yes
+
+# Compilers and tools
+CC = i686-elf-gcc
+ASM = nasm
+LINK = i686-elf-ld
+
+# Directories
+SRCDIR = src
+OBJDIR = obj
+DEPDIR = dep
+
+LIBGCC_DIR = $(shell $(CC) -print-file-name=)
+
+# Flags
+CFLAGS = -Wall -Werror -Wno-strict-aliasing -ffreestanding -nostdlib -I ../.. -I include -I ../../kernel/include -I ../../crt/include
+ASMFLAGS = -felf
+LDFLAGS = -shared
+
+ifeq ($(DEBUG), yes)
+    CFLAGS += -g
+else
+    CFLAGS += -O3
+endif
+
+# Input and output files
+SOURCES =  $(shell find $(SRCDIR) -type f -name \*.c)
+DEPENDS = $(shell find $(DEPDIR) -type f -name \*.d)
+OBJECTS = $(patsubst $(SRCDIR)/%.c, $(OBJDIR)/%.o, $(patsubst $(SRCDIR)/%.asm, $(OBJDIR)/%.o, $(SOURCES)))
+
+.PHONY: all clean
+
+all: $(OBJDIR) $(DEPDIR) acpica.drv
+
+clean:
+	find $(OBJDIR) -name \*.o -delete
+	find $(DEPDIR) -name \*.d -delete
+	rm -f acpica.drv
+
+-include $(DEPENDS)
+
+$(OBJDIR):
+	mkdir -p $(OBJDIR)
+
+$(DEPDIR):
+	mkdir -p $(DEPDIR)
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.c Makefile
+	mkdir -p $(dir $@)
+	mkdir -p $(dir $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d))
+	$(CC) $(CFLAGS) -MMD -MP -MF $(@:$(OBJDIR)/%.o=$(DEPDIR)/%.d) -o $@ -c $<
+
+$(OBJDIR)/%.o: $(SRCDIR)/%.asm
+	mkdir -p $(dir $@)
+	$(ASM) $(ASMFLAGS) -o $@ $<
+
+acpica.drv: $(OBJECTS)
+	$(LINK) -o $@ $(OBJECTS) $(LDFLAGS)

+ 0 - 0
kernel/include/acpica/acapps.h → drivers/acpica/include/acapps.h


+ 0 - 0
kernel/include/acpica/acbuffer.h → drivers/acpica/include/acbuffer.h


+ 0 - 0
kernel/include/acpica/acclib.h → drivers/acpica/include/acclib.h


+ 0 - 0
kernel/include/acpica/accommon.h → drivers/acpica/include/accommon.h


+ 0 - 0
kernel/include/acpica/acconfig.h → drivers/acpica/include/acconfig.h


+ 0 - 0
kernel/include/acpica/acdebug.h → drivers/acpica/include/acdebug.h


+ 0 - 0
kernel/include/acpica/acdisasm.h → drivers/acpica/include/acdisasm.h


+ 0 - 0
kernel/include/acpica/acdispat.h → drivers/acpica/include/acdispat.h


+ 0 - 0
kernel/include/acpica/acevents.h → drivers/acpica/include/acevents.h


+ 0 - 0
kernel/include/acpica/acexcep.h → drivers/acpica/include/acexcep.h


+ 0 - 0
kernel/include/acpica/acglobal.h → drivers/acpica/include/acglobal.h


+ 0 - 0
kernel/include/acpica/achware.h → drivers/acpica/include/achware.h


+ 0 - 0
kernel/include/acpica/acinterp.h → drivers/acpica/include/acinterp.h


+ 0 - 0
kernel/include/acpica/aclocal.h → drivers/acpica/include/aclocal.h


+ 0 - 0
kernel/include/acpica/acmacros.h → drivers/acpica/include/acmacros.h


+ 0 - 0
kernel/include/acpica/acnames.h → drivers/acpica/include/acnames.h


+ 0 - 0
kernel/include/acpica/acnamesp.h → drivers/acpica/include/acnamesp.h


+ 0 - 0
kernel/include/acpica/acobject.h → drivers/acpica/include/acobject.h


+ 0 - 0
kernel/include/acpica/acopcode.h → drivers/acpica/include/acopcode.h


+ 0 - 0
kernel/include/acpica/acoutput.h → drivers/acpica/include/acoutput.h


+ 0 - 0
kernel/include/acpica/acparser.h → drivers/acpica/include/acparser.h


+ 0 - 0
kernel/include/acpica/acpi.h → drivers/acpica/include/acpi.h


+ 0 - 0
kernel/include/acpica/acpiosxf.h → drivers/acpica/include/acpiosxf.h


+ 0 - 0
kernel/include/acpica/acpixf.h → drivers/acpica/include/acpixf.h


+ 0 - 0
kernel/include/acpica/acpredef.h → drivers/acpica/include/acpredef.h


+ 0 - 0
kernel/include/acpica/acresrc.h → drivers/acpica/include/acresrc.h


+ 0 - 0
kernel/include/acpica/acrestyp.h → drivers/acpica/include/acrestyp.h


+ 0 - 0
kernel/include/acpica/acstruct.h → drivers/acpica/include/acstruct.h


+ 0 - 0
kernel/include/acpica/actables.h → drivers/acpica/include/actables.h


+ 0 - 0
kernel/include/acpica/actbl.h → drivers/acpica/include/actbl.h


+ 0 - 0
kernel/include/acpica/actbl1.h → drivers/acpica/include/actbl1.h


+ 0 - 0
kernel/include/acpica/actbl2.h → drivers/acpica/include/actbl2.h


+ 0 - 0
kernel/include/acpica/actbl3.h → drivers/acpica/include/actbl3.h


+ 0 - 0
kernel/include/acpica/actypes.h → drivers/acpica/include/actypes.h


+ 0 - 0
kernel/include/acpica/acutils.h → drivers/acpica/include/acutils.h


+ 0 - 0
kernel/include/acpica/acuuid.h → drivers/acpica/include/acuuid.h


+ 0 - 0
kernel/include/acpica/amlcode.h → drivers/acpica/include/amlcode.h


+ 0 - 0
kernel/include/acpica/amlresrc.h → drivers/acpica/include/amlresrc.h


+ 0 - 0
kernel/include/acpica/platform/acenv.h → drivers/acpica/include/platform/acenv.h


+ 0 - 0
kernel/include/acpica/platform/acenvex.h → drivers/acpica/include/platform/acenvex.h


+ 0 - 0
kernel/include/acpica/platform/acgcc.h → drivers/acpica/include/platform/acgcc.h


+ 0 - 0
kernel/include/acpica/platform/acmnlth.h → drivers/acpica/include/platform/acmnlth.h


+ 0 - 0
kernel/src/acpica/dispatcher/dsargs.c → drivers/acpica/src/dispatcher/dsargs.c


+ 0 - 0
kernel/src/acpica/dispatcher/dscontrol.c → drivers/acpica/src/dispatcher/dscontrol.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsdebug.c → drivers/acpica/src/dispatcher/dsdebug.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsfield.c → drivers/acpica/src/dispatcher/dsfield.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsinit.c → drivers/acpica/src/dispatcher/dsinit.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsmethod.c → drivers/acpica/src/dispatcher/dsmethod.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsmthdat.c → drivers/acpica/src/dispatcher/dsmthdat.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsobject.c → drivers/acpica/src/dispatcher/dsobject.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsopcode.c → drivers/acpica/src/dispatcher/dsopcode.c


+ 0 - 0
kernel/src/acpica/dispatcher/dsutils.c → drivers/acpica/src/dispatcher/dsutils.c


+ 0 - 0
kernel/src/acpica/dispatcher/dswexec.c → drivers/acpica/src/dispatcher/dswexec.c


+ 0 - 0
kernel/src/acpica/dispatcher/dswload.c → drivers/acpica/src/dispatcher/dswload.c


+ 0 - 0
kernel/src/acpica/dispatcher/dswload2.c → drivers/acpica/src/dispatcher/dswload2.c


+ 0 - 0
kernel/src/acpica/dispatcher/dswscope.c → drivers/acpica/src/dispatcher/dswscope.c


+ 0 - 0
kernel/src/acpica/dispatcher/dswstate.c → drivers/acpica/src/dispatcher/dswstate.c


+ 0 - 0
kernel/src/acpica/events/evevent.c → drivers/acpica/src/events/evevent.c


+ 0 - 0
kernel/src/acpica/events/evglock.c → drivers/acpica/src/events/evglock.c


+ 0 - 0
kernel/src/acpica/events/evgpe.c → drivers/acpica/src/events/evgpe.c


+ 0 - 0
kernel/src/acpica/events/evgpeblk.c → drivers/acpica/src/events/evgpeblk.c


+ 0 - 0
kernel/src/acpica/events/evgpeinit.c → drivers/acpica/src/events/evgpeinit.c


+ 0 - 0
kernel/src/acpica/events/evgpeutil.c → drivers/acpica/src/events/evgpeutil.c


+ 0 - 0
kernel/src/acpica/events/evhandler.c → drivers/acpica/src/events/evhandler.c


+ 0 - 0
kernel/src/acpica/events/evmisc.c → drivers/acpica/src/events/evmisc.c


+ 0 - 0
kernel/src/acpica/events/evregion.c → drivers/acpica/src/events/evregion.c


+ 0 - 0
kernel/src/acpica/events/evrgnini.c → drivers/acpica/src/events/evrgnini.c


+ 0 - 0
kernel/src/acpica/events/evsci.c → drivers/acpica/src/events/evsci.c


+ 0 - 0
kernel/src/acpica/events/evxface.c → drivers/acpica/src/events/evxface.c


+ 0 - 0
kernel/src/acpica/events/evxfevnt.c → drivers/acpica/src/events/evxfevnt.c


+ 0 - 0
kernel/src/acpica/events/evxfgpe.c → drivers/acpica/src/events/evxfgpe.c


+ 0 - 0
kernel/src/acpica/events/evxfregn.c → drivers/acpica/src/events/evxfregn.c


+ 0 - 0
kernel/src/acpica/executer/exconfig.c → drivers/acpica/src/executer/exconfig.c


+ 0 - 0
kernel/src/acpica/executer/exconvrt.c → drivers/acpica/src/executer/exconvrt.c


+ 0 - 0
kernel/src/acpica/executer/excreate.c → drivers/acpica/src/executer/excreate.c


+ 0 - 0
kernel/src/acpica/executer/exdebug.c → drivers/acpica/src/executer/exdebug.c


+ 0 - 0
kernel/src/acpica/executer/exdump.c → drivers/acpica/src/executer/exdump.c


+ 0 - 0
kernel/src/acpica/executer/exfield.c → drivers/acpica/src/executer/exfield.c


+ 0 - 0
kernel/src/acpica/executer/exfldio.c → drivers/acpica/src/executer/exfldio.c


+ 0 - 0
kernel/src/acpica/executer/exmisc.c → drivers/acpica/src/executer/exmisc.c


+ 0 - 0
kernel/src/acpica/executer/exmutex.c → drivers/acpica/src/executer/exmutex.c


+ 0 - 0
kernel/src/acpica/executer/exnames.c → drivers/acpica/src/executer/exnames.c


+ 0 - 0
kernel/src/acpica/executer/exoparg1.c → drivers/acpica/src/executer/exoparg1.c


+ 0 - 0
kernel/src/acpica/executer/exoparg2.c → drivers/acpica/src/executer/exoparg2.c


+ 0 - 0
kernel/src/acpica/executer/exoparg3.c → drivers/acpica/src/executer/exoparg3.c


+ 0 - 0
kernel/src/acpica/executer/exoparg6.c → drivers/acpica/src/executer/exoparg6.c


+ 0 - 0
kernel/src/acpica/executer/exprep.c → drivers/acpica/src/executer/exprep.c


+ 0 - 0
kernel/src/acpica/executer/exregion.c → drivers/acpica/src/executer/exregion.c


+ 0 - 0
kernel/src/acpica/executer/exresnte.c → drivers/acpica/src/executer/exresnte.c


+ 0 - 0
kernel/src/acpica/executer/exresolv.c → drivers/acpica/src/executer/exresolv.c


+ 0 - 0
kernel/src/acpica/executer/exresop.c → drivers/acpica/src/executer/exresop.c


+ 0 - 0
kernel/src/acpica/executer/exstore.c → drivers/acpica/src/executer/exstore.c


+ 0 - 0
kernel/src/acpica/executer/exstoren.c → drivers/acpica/src/executer/exstoren.c


+ 0 - 0
kernel/src/acpica/executer/exstorob.c → drivers/acpica/src/executer/exstorob.c


+ 0 - 0
kernel/src/acpica/executer/exsystem.c → drivers/acpica/src/executer/exsystem.c


Some files were not shown because too many files changed in this diff