Commit Graph

195 Commits

Author SHA1 Message Date
Ingo Weinhold
c83d9dad1c * platform_allocate_region() has a new boolean parameter "exactAddress"
specifying whether only the exact supplied address is acceptable. If
  false, the address is considered a hint only. It will be picked, if
  available, otherwise a greater address is tried to be acquired, and
  as last resort any address. This feature is only implemented for PPC.
  It is needed since the preferred kernel text base address 0x80000000
  might not be available (and actually isn't on my Mac mini).
* Fixed a bug in the PPC memory management code:
  is_{virtual,physical}_allocated() were checking whether the given
  range was completely contained by an existing range instead of
  checking for intersection. As a consequence we could (and did) allocate
  a range intersecting with already allocated ranges. The kernel segment
  thus overwrote OF memory for instance.
* The ELF loader makes sure that it got both text and data segment of
  the image to be loaded.

The PPC boot loader successfully loads kernel and modules now. Next
comes the hard part, I'm afraid.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15708 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-29 01:50:23 +00:00
Ingo Weinhold
68d3fc6f8f Don't allow allocation of zero sized area.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15700 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 20:02:34 +00:00
Ingo Weinhold
ea5b67a88b Don't allocate the heap with of_claim(), but rather use
platform_allocation_region(). Since the callback stuff doesn't seem to
work, the Open Firmware didn't ask us to allocate memory in turn, and
thus we didn't know about the range that had been mapped and reused it
later.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15699 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 19:54:19 +00:00
Ingo Weinhold
22bc93e31c arch_mmu_allocate() translated the protection flags incorrectly
(B_WRITE_AREA to read-only).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15697 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-28 19:47:50 +00:00
Ingo Weinhold
d561d0ad68 Added a mini networking stack to the boot loader. It speaks basic ARP,
IP, and UDP, as well as a home brewn UDP based protocol, "remote disk",
which provides random access to a single remote file/device. The Open
Firmware flavored boot loader automatically initializes the net stack,
searches for a remote disk, and tries to boot from it, if the boot
device is a network device (e.g. when loading the boot loader via
TFTP).

This is quite nice for developing with a two-machine setup, since one
doesn't even need to install Haiku on the test machine anymore, but can
serve it directly from the development machine. When the networking
support in the kernel is working, this method could even be used to
fully boot, not just for loading kernel and initial modules.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15689 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 22:01:33 +00:00
Ingo Weinhold
6470bb6152 Removed superfluous static variable I accidentially introduced.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15687 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:34:50 +00:00
Ingo Weinhold
22a6522245 * Renamed of_call_method() to of_call_client_function() and added
of_call_method() which is actually an implementation of the
  "call-method" client function.
* of_interpret() announced one less return value than actually needed.
  Seemed to work anyway, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15683 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-27 21:15:56 +00:00
Ingo Weinhold
44c11fdbc1 Added console support functions required for the generic textual boot
menu. The menu basically works, but has a couple of problems. The
harmless ones are graphical: we get cursor artifacts when the colors
are changed, and the item selection doesn't quite look as it should.
More serious is the lack of Home/End, Page Up/Down keys. All I read from
the console is a '\0' byte when such a key is pressed. The cursor keys
work fortunately. I mapped the functionality of Page Up/Down
additionally to the Left/Right cursor keys. So the menu should be usable
at least. I guess, I'll leave it in that state; Axel wants a graphical
menu anyway.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15589 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 13:49:45 +00:00
Ingo Weinhold
b821cecc36 Added of_interpret for interpreting arbitrary Forth code.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15588 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 13:40:15 +00:00
Ingo Weinhold
4c62b0919f Pulled platform independent part of the BIOS boot menu out into
platform/generic/...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15587 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 13:35:01 +00:00
Axel Dörfler
7a3fa7d368 * Followed Ingo's suggestion and removed the now superfluous "length" correction
in ConsoleHandle::WriteAt().
* Updated license.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15581 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-19 09:44:52 +00:00
Ingo Weinhold
8f75497433 Fixed endless loop.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15576 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-18 14:35:31 +00:00
Axel Dörfler
484c80abd0 * Added missing prototypes for get_eflags() and set_eflags() to arch_system_info.h
* The boot loader now checks the CPU for the cpuid and rdtsc features, which we
  currently both rely on.
* Removed old and no longer used stage2_priv.h header


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15534 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-12-14 10:43:28 +00:00
Ingo Weinhold
758b1d0e05 Fixes that make Haiku build with gcc 4. Mainly out of the following
categories:
* Missing includes (like <stdlib.h> and <string.h>).
* Linking against $(TARGET_LIBSTDC++) instead of libstdc++.r4.so.
* Local variables shadowing parameters.
* Default parameters in function definitions (as opposed to function
  declarations).
* All C++ stuff (nothrow, map, set, vector, min, max,...) must be imported
  explicitly from the std:: namespace now.
* "new (sometype)[...]" must read "new sometype[...]", even if sometype is
  something like "const char *".
* __FUNCTION__ is no longer a string literal (but a string expression), i.e.
  'printf(__FUNCTION__ ": ...\n")' is invalid code.
* A type cast results in a non-lvalue. E.g. "(char *)buffer += bytes"
  is an invalid expression.
* "friend class SomeClass" only works when SomeClass is known before.
  Otherwise the an inner class with that name is considered as friend.
  gcc 4 is much pickier about scopes.
* gcc 4 is generally stricter with respect to type conversions in C.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14878 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-12 23:27:14 +00:00
Axel Dörfler
0752edcf8d The default video mode now prefers to be 800x600x16 - if available.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14620 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-11-01 18:03:35 +00:00
Ingo Weinhold
338b8dc301 Merged changes from branch build_system_redesign at revision 14573.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14574 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-29 16:27:43 +00:00
Axel Dörfler
8fcd6b8e61 * renamed smp_boot.c to smp.cpp
* there is now a "Disable Hyper-Threading" safemode in the boot loader
* the SMP & HT menu items are now added in smp.cpp - and are only added
  if the system supports one of them.
* more cleanup to smp_apic.h
* removed cpuid() from the boot loader's support.S - instead, it will now
  use the one from the kernel.
* added a very weak HT detection: if the MP config only listed one CPU,
  and this CPU supports HT, we enable the other logic processor manually -
  as this currently doesn't work, it's disabled, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14536 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-26 22:57:13 +00:00
Axel Dörfler
9f2dae6a17 For now, always enable serial debug output in the boot loader.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14532 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-26 22:31:27 +00:00
Axel Dörfler
fde12d6407 Some cleanup: renamed the mp_ext_* structures to mp_base_* as they are
part of the base table, not the extended table.
Renamed some structure fields, variables to be clearer and nicer to read.
Removed some unused stuff.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14502 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-24 21:37:40 +00:00
Axel Dörfler
0c67510ae1 Enabled SMP detection again - since it's very likely that it doesn't work on
your system, I've also added a "Disable SMP" safemode option. The NO_SMP
define is still there, and will be removed once SMP works flawlessly.
Prints out infos about the interrupt entries in the MP config.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14499 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-24 19:43:50 +00:00
Axel Dörfler
7a09488d8e Could overwrite the memory that the SMP code is using for the trampoline
code/stack with page tables.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14498 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-24 19:29:59 +00:00
Axel Dörfler
3d5ecf962c Minor cleanup, no functional change.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14472 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-22 16:53:49 +00:00
Axel Dörfler
8c20600d12 Looks like some BIOS don't bother filling in cylinder/head/sectors_per_track information
for extended drive parameters.
This should fix eventual "no boot disk" messages of the boot loader.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14435 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-19 22:43:50 +00:00
Axel Dörfler
5a54b40166 Implemented platform_add_block_devices() - if you have more than one bootable
Haiku disk installed, you can now choose between them in the boot loader.
Also fixed build - obviously forgot to compile before a last minute change...


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14404 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-17 14:20:41 +00:00
Axel Dörfler
597416d1dd gKernelArgs.boot_disk.cd is now only set to true, if the selected boot volume
is still the CD-ROM.
BIOSDrive::ReadAt() now tries to read a specific block up to 3 times before
failing - after the second retry, it will also reset the disk system.
get_ext_drive_parameters() will now fail if the BIOS fills in the device_parameters
structure incorrectly (just tested some values against zero, that at least helps
in the case of one of my systems).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14401 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-17 13:45:55 +00:00
Axel Dörfler
e84506daca The home/end keys are no longer able to select disabled entries.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14400 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-17 13:40:57 +00:00
Axel Dörfler
19567a9917 Now makes sure the selected entry is visible upon entry, too.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14398 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-17 10:09:04 +00:00
Axel Dörfler
a51b55c985 "kernel_args.boot_disk.cd" was never set to true...
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14397 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-17 10:06:28 +00:00
Axel Dörfler
2e2bd87511 Renamed devices_check_boot_cd() to check_boot_cd() and moved it up to the other BIOS
functions - it no longer terminates the CD-ROM emulation, but only checks the status,
and therefore, it's now called by platform_register_boot_device() instead of from
platform_start_kernel().
This also makes the devices.h header useless.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14390 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-14 21:38:12 +00:00
Axel Dörfler
51e081bade Removed platform_boot_device_is_image() - platform_get_boot_device() now fills
in the adequate field in the kernel_args structure.
Renamed gCDFloppyBoot variable to gBootedFromImage (as network boot should look
similar).
The "kernel_args.boot_disk.cd" field is now maintained as well.
The print_item_at() menu function now prints the Menu::ChoiceText() instead
of that of its marked item.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14389 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-14 21:26:30 +00:00
Axel Dörfler
d32f04d20a Improved comments about the manual symbol relocations.
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14382 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-14 11:49:35 +00:00
Axel Dörfler
e3fcb58ebb The boot loader now has special support for being booted from a boot image
like floppy or CD boot.
This allows it to reduce the number of scans needed to identify the boot
partition - when booted from a real floppy, this speeds up the boot
process by a magnitude.
Also, the loader now has a fall back in case there were no "boot" links
on the disk - the current boot floppy script doesn't create them.
With these changes, I was able to boot into a HD based Haiku installation
from a floppy disk. It's not yet enough to boot from CD (as the boot
device selection is a bit too simplistic right now), but it will eventually
come next. Testing is a lot slower here, though, as neither qemu nor
Bochs support multi-session CDs (at least I have no idea how to get them
to do this).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14380 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-14 11:34:18 +00:00
Axel Dörfler
ceb769360d Got rid of the now unused sPageTable variable.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14378 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-14 09:26:11 +00:00
Axel Dörfler
7416092b83 Marcus spotted an error in the cylinder calculation in get_drive_parameters() - didn't
have an effect on floppies or CD-ROMs, but would have on real hard drives that require
CHS access.
Changed the cylinder-to-regs conversion in BIOSDrive::ReadAt() (that one was actually
correct) to make it look similar to the conversion in the opposite direction in
get_drive_parameters().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14377 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-14 09:25:45 +00:00
Axel Dörfler
8d156f1c5e Fixed a bug with the offset handling in BIOSDrive::ReadAt().
Implemented CHS support needed for smaller hard drives, CD-ROM, ...
Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14369 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-13 13:45:23 +00:00
Axel Dörfler
e83ba2ee32 Enlarged the boot loader's heap area to 64kB needed for the tarfs.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14368 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-13 13:43:13 +00:00
Axel Dörfler
4cc5dde4a7 Updated memory layout comment.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14367 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-13 13:40:58 +00:00
Axel Dörfler
0eecdd8334 Made the page table allocation/filling mechanism a bit more flexible and less error prone.
Also, freeing regions is now supported (but still only the last allocated region can be
freed, as that's currently good enough).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14366 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-13 13:37:18 +00:00
Axel Dörfler
0428a0ddc4 Now loads the maximum size of zbeos when booted from a floppy or CD.
Note, this value should be patched by the build system to the actual size
of zbeos - but since we don't have this mechanism in place yet, the maximum
value is probably the best default, even if it should slow down a floppy
boot considerably.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14344 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-10-11 00:21:37 +00:00
Michael Lotz
06500c3e58 The color index is multiplied by 3 because there are R, G and B values for each color in the palette. But uint8 can't hold these for any index above 256/3 obviously. Also fixed the 24-bit display. It works on real hardware but looks broken with bochs. I suppose bochs does not handle 24-bit VESA correctly though.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-06-29 23:40:25 +00:00
Axel Dörfler
8cd812c172 Forgot to uncomment this line: the "depth" argument of the vesa file is now also
evaluated, so that you can specify something different than 8 bit in there.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12840 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-26 12:05:31 +00:00
Axel Dörfler
8bd36612dc First try to get the boot logo displayed properly in all color spaces.
For some reason, the colors are wrong for anything but 8bit modes, though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12823 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-26 07:47:19 +00:00
Axel Dörfler
895e2a0375 Reenabled the Qemu workaround: the frame buffer is now cleared after a mode change.
After all, there might be real graphics card which behave the same??


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12551 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-05-03 02:06:08 +00:00
Axel Dörfler
718b5114e0 This should fix the build after all the kernel/system renaming.
If anything is still broken (and was not before :)), please shout.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12361 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-13 13:59:17 +00:00
Axel Dörfler
5af32e7526 Renamed src/kernel to src/system.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@12359 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-04-13 13:06:35 +00:00