978 Commits

Author SHA1 Message Date
Ingo Weinhold
46122852f1 packagefs: Add caching for the package file heap reader
* ReaderImplBase:
  - Add virtual CreateCachedHeapReader() which can create a cached
    reader based on the given heap reader.
  - Rename HeapReader() to RawHeapReader() and add HeapReader() for the
    cached heap reader.
  - Add DetachHeapReader() to allow a clients to remove the heap
    reader(s) after deleting the ReaderImplBase object.
* packagefs:
  - Add CachedDataReader class, which wraps a given
    BAbstractBufferedDataReader and provides caching for it using a
    VMCache. The implementation is based on the IOCache implementation.
  - Use CachedDataReader to wrap the heap reader. For file data that
    means they are cached twice -- in the heap reader cache and in the
    file cache -- but due to the heap reader using a VMCache as well,
    the pages will be recycled automatically anyway. For attribute data
    the cache should be very helpful, since they weren't cached at all
    before.
2013-05-25 01:12:32 +02:00
Ingo Weinhold
d59e0feb59 package: Suppress version mismatch errors where V1 is supported
* Add flags parameter to Init() of BPackageReader and friends.
* Introduce flag B_HPKG_READER_DONT_PRINT_VERSION_MISMATCH_MESSAGE and
  don't print a version mismatch error when given.
* package extract/list: Use the new flag.
2013-05-25 01:12:31 +02:00
Ingo Weinhold
64bb883062 Support booting with a packaged boot loader
* Add new package haiku_loader.hpkg and move haiku_loader there. The
  package is built without compression, so that the stage 1 boot loader
  has a chance of loading it.
* Adjust the stage 1 boot loader to load the haiku_loader package and
  relocate the boot loader code accordingly.
2013-05-25 01:12:31 +02:00
Ingo Weinhold
1f633814fa hpkg format: compress the whole heap
Instead of handling compression for individual file/attribute data we
do now compress the whole heap where they are stored. This
significantly improves compression ratios. We still divide the
uncompressed data into 64 KiB chunks and use a chunk offset array for
the compressed chunks to allow for quick random access without too much
overhead. The tradeoff is a limited possible compression ratio -- i.e.
we won't be as good as tar.gz (though surprisingly with my test
archives we did better than zip).

The other package file sections (package attributes and TOC) are no
longer compressed individually. Their uncompressed data are simply
pushed onto the heap where the usual compression strategy applies. To
simplify things the repository format has been changed in the same
manner although it doesn't otherwise use the heap, since it only stores
meta data.

Due to the data compression having been exposed in public and private
API, this change touches a lot of package kit using code, including
packagefs and the boot loader packagefs support. The latter two haven't
been tested yet. Moreover packagefs needs a new kind of cache so we
avoid re-reading the same heap chunk for two different data items it
contains.
2013-05-25 01:12:25 +02:00
Ingo Weinhold
0ee1651856 Rename BBlockBufferCache and friends to *Pool*
Also move BBlockBufferPoolNoLock into BHPKG namespace with the other
classes. Not sure why it wasn't there before.
2013-05-25 01:12:25 +02:00
Ingo Weinhold
c663ca2171 Merge branch 'master' into package-management
Conflicts:
	build/jam/HaikuImage
	src/system/kernel/arch/x86/64/arch.S
2013-05-12 00:18:19 +02:00
Axel Dörfler
4b723e3fb8 boot loader: Almost removed use of kernel_cpp.h.
* For some reason that is beyond me, fat/CachedBlock.cpp needs this header,
  or else building the boot loader fails.
2013-05-11 19:34:22 +02:00
Ingo Weinhold
f132bdfe9f boot loader: Add 256 KB additional heap
packagefs is using quite a bit additional memory for the MIME DB
entries and with all files identified.
2013-05-09 03:17:43 +02:00
Ingo Weinhold
00090d290d boot loader: print max heap usage info before entering kernel 2013-05-09 03:14:35 +02:00
Oliver Tappe
9abd3e6f53 Fix race condition during build of some file systems.
* make sure the zlib package is available before trying to use zlib.h
2013-05-06 20:01:40 +02:00
Ingo Weinhold
7c6bff1734 Complete outsourcing of zlib
* Add optional packages Zlib and Zlib-devel.
* Simplify the build feature section for zlib and also extract the
  source package.
* Replace all remaining references to the zlib instance in the tree and
  remove it.
2013-05-06 04:37:18 +02:00
Ingo Weinhold
25a7b01d15 Merge branch 'master' into package-management
Additional changes:
* Add src/system/kernel/lib/zlib, which builds a kernel version of zlib,
  needed by packagefs.
* BuildFeatures: Add a build feature "gcc2" to allow for easier checks.
* Referenceable.cpp: Include <OS.h> instead of <debugger.h>. The latter
  is not needed and prevents building for the build platform.
* zlib/zutil.h: Fix gcc 2 build. We really should use the external
  package instead.

Conflicts:
	.gitignore
	build/jam/BuildSetup
	build/jam/FileRules
	build/jam/FloppyBootImage
	build/jam/HaikuImage
	build/jam/ImageRules
	build/jam/KernelRules
	build/jam/NetBootArchive
	build/jam/OptionalBuildFeatures
	build/jam/OptionalLibPackages
	build/jam/OptionalPackageDependencies
	build/jam/OptionalPackages
	build/scripts/build_haiku_image
	configure
	data/bin/installoptionalpackage
	data/system/boot/Bootscript
	headers/os/app/Message.h
	headers/os/package/PackageInfo.h
	headers/os/package/PackageInfoAttributes.h
	headers/os/package/PackageInfoSet.h
	headers/os/package/PackageRoster.h
	headers/os/package/PackageVersion.h
	headers/os/package/hpkg/PackageInfoAttributeValue.h
	headers/os/storage/FindDirectory.h
	headers/os/storage/Node.h
	headers/os/support/StringList.h
	headers/private/system/directories.h
	src/add-ons/kernel/drivers/audio/ac97/es1370/Jamfile
	src/add-ons/kernel/file_systems/packagefs/AttributeIndex.cpp
	src/add-ons/kernel/file_systems/packagefs/Jamfile
	src/add-ons/kernel/file_systems/packagefs/Package.cpp
	src/add-ons/kernel/file_systems/packagefs/Package.h
	src/add-ons/kernel/file_systems/packagefs/PackageDomain.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageDomain.h
	src/add-ons/kernel/file_systems/packagefs/PackageFSRoot.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkDirectory.h
	src/add-ons/kernel/file_systems/packagefs/PackageLinkSymlink.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageLinkSymlink.h
	src/add-ons/kernel/file_systems/packagefs/PackageLinksDirectory.cpp
	src/add-ons/kernel/file_systems/packagefs/PackageNode.h
	src/add-ons/kernel/file_systems/packagefs/ResolvableFamily.cpp
	src/add-ons/kernel/file_systems/packagefs/Version.cpp
	src/add-ons/kernel/file_systems/packagefs/Version.h
	src/add-ons/kernel/file_systems/packagefs/Volume.cpp
	src/add-ons/kernel/file_systems/packagefs/Volume.h
	src/add-ons/kernel/file_systems/packagefs/kernel_interface.cpp
	src/add-ons/kernel/file_systems/userlandfs/shared/driver_settings.c
	src/apps/deskbar/BarApp.cpp
	src/apps/deskbar/BarMenuBar.cpp
	src/apps/deskbar/BarMenuBar.h
	src/apps/deskbar/BarView.cpp
	src/apps/deskbar/BarView.h
	src/apps/deskbar/BarWindow.cpp
	src/apps/deskbar/BarWindow.h
	src/apps/deskbar/DeskbarMenu.cpp
	src/apps/deskbar/DeskbarMenu.h
	src/apps/deskbar/DeskbarUtils.cpp
	src/apps/deskbar/DeskbarUtils.h
	src/apps/deskbar/ExpandoMenuBar.cpp
	src/apps/deskbar/ExpandoMenuBar.h
	src/apps/deskbar/TeamMenu.cpp
	src/apps/processcontroller/ProcessController.cpp
	src/apps/remotedesktop/RemoteDesktop.cpp
	src/bin/bash/config-top.h
	src/bin/finddir.c
	src/bin/package/Jamfile
	src/bin/package/command_add.cpp
	src/bin/package/command_create.cpp
	src/bin/package/command_list.cpp
	src/bin/package_repo/command_list.cpp
	src/bin/pkgman/command_refresh.cpp
	src/build/libbe/support/Jamfile
	src/build/libpackage/Jamfile
	src/build/libroot/Jamfile
	src/build/libroot/fs.cpp
	src/build/libroot/remapped_functions.h
	src/kits/locale/MutableLocaleRoster.cpp
	src/kits/opengl/GLRendererRoster.cpp
	src/kits/package/PackageInfo.cpp
	src/kits/package/PackageInfoSet.cpp
	src/kits/package/PackageRoster.cpp
	src/kits/package/PackageVersion.cpp
	src/kits/package/RepositoryCache.cpp
	src/kits/package/hpkg/PackageWriterImpl.cpp
	src/kits/package/hpkg/ReaderImplBase.cpp
	src/kits/package/hpkg/WriterImplBase.cpp
	src/kits/print/PrintTransport.cpp
	src/kits/print/Printer.cpp
	src/kits/screensaver/ScreenSaverRunner.cpp
	src/kits/support/StringList.cpp
	src/kits/tracker/ContainerWindow.cpp
	src/kits/tracker/DeskWindow.cpp
	src/kits/tracker/PoseView.cpp
	src/libs/print/libprint/Transport.cpp
	src/preferences/printers/AddPrinterDialog.cpp
	src/preferences/screensaver/ScreenSaverWindow.cpp
	src/servers/debug/DebugServer.cpp
	src/servers/input/AddOnManager.cpp
	src/servers/media_addon/MediaAddonServer.cpp
	src/system/boot/Jamfile
	src/system/boot/loader/Jamfile
	src/system/boot/loader/loader.cpp
	src/system/boot/loader/vfs.cpp
	src/system/kernel/fs/vfs.cpp
	src/system/kernel/fs/vfs_boot.cpp
	src/system/libroot/os/find_directory.cpp
	src/system/runtime_loader/runtime_loader.cpp
	src/tools/package/Jamfile
2013-05-05 15:03:26 +02:00
Michael Lotz
1a5e87cc64 haiku_loader: Reuse BPlusTree implementation of the BFS add-on.
Instead of having an almost exact, albeit read only, duplicate of the
implementation.
2013-05-02 23:26:03 +02:00
Jérôme Duval
5f08555a59 GCC 4.7.x doesn't allow writes in a referenced packed struct.
* error: cannot bind packed field 'image->preloaded_elf64_image::elf_header'
    to 'ELFLoader<ELF64Class>::EhdrType& {aka Elf64_Ehdr&}'
2013-04-26 21:17:36 +02:00
Jérôme Duval
d762df1df1 GCC 4.7.x doesn't allow setting a field in a referenced packed struct.
* error message: error: cannot bind packed field
'args->kernel_args::platform_args.platform_kernel_args::apm' to 'apm_info&'
* the reason would be that the reference doesn't have alignment information anymore.
* changed the reference to const for read access, and use the long form for setting a field.
2013-04-26 21:17:31 +02:00
Alex Smith
e6a0c79790 CID 608055: Fixed unintended sign extension. 2013-03-22 19:41:57 +00:00
François Revol
32bd2dedd9 bootloader: Fix an overlooked condition in mmu_allocate()
The size variable at this point is actually a page count.
The test should never be true anyway though. Maybe we should use a
pages variable for clarity?
2013-02-21 16:35:37 +01:00
François Revol
55e7521e36 ARM: Fix typo 2013-02-18 15:00:35 +01:00
Axel Dörfler
ab31389341 Implemented write support, reorganized source files.
* Moved some functionality into their own files so that they can easily
  be reused by other code.
* Added crc32() function from FreeBSD. Implemented CRC handling and
  validation.
* Implemented missing write functionality.
2013-01-26 01:30:23 +01:00
Axel Dörfler
61ba12594b Renamed partitioning system "efi" directory to "gpt". 2013-01-23 23:21:25 +01:00
Matt Madia
5644d283b6 Manually applied: Fix typos: super block -> superblock (#8974)
by: Przemysław Buczkowski <przemub@yahoo.pl>
2012-12-09 08:51:58 -05:00
Przemysław Buczkowski
46cf7a5a73 Fix typos: super block -> superblock (#8974)
Signed-off-by: Przemysław Buczkowski <przemub@yahoo.pl>
Signed-off-by: Matt Madia <mattmadia@gmail.com>
2012-12-09 08:47:46 -05:00
Michael Lotz
7c45cf7155 Remove tracking of sMaxVirtualAddress as it's not used.
The value computed isn't actually used anywhere. It just ensured that
a panic would be triggered if we "skipped" to virtual addresses further
along. This shouldn't be problematic however.
2012-12-04 23:38:06 +01:00
Michael Lotz
83f7c22537 Reuse get_or_create_page_table() and remove similar add_page().
The former also does the initialization, simplifying the code and
reducing redundancy with the page directory init path.
2012-12-04 23:38:05 +01:00
Michael Lotz
a438da7c8b Clear the page tables on creation, use macros for counts.
This makes it less likely that uninitialized entries cause troubles.
Also panic if we encounter an unknown entry type instead of defaulting
to 4K pages.
2012-12-04 23:38:04 +01:00
Michael Lotz
89564c0a10 Simplify the page directory init loops.
Also check and possibly reuse an existing page directory entry. This
makes the possible memory maps a little more flexible.
2012-12-04 23:38:04 +01:00
Michael Lotz
50c463f4f1 Header cleanup, rename macros for more consistency. 2012-12-04 23:38:03 +01:00
Michael Lotz
3d4175bfe1 Map the page directory before turning on the MMU.
And actually use the virtual address for it later on. This wasn't
problematic as the virtual and physical addresses are identity mapped,
but it seems more correct to do it in this order.
2012-12-04 23:37:18 +01:00
Michael Lotz
0deac574bd Simplify, don't do the calculation twice. 2012-12-04 23:36:09 +01:00
Michael Lotz
05893479e3 Style cleanup only. 2012-12-04 23:36:09 +01:00
Michael Lotz
333883485c Rephrase the debug output, it is not that early anymore. 2012-12-04 23:36:08 +01:00
Michael Lotz
2dcc1cfeb9 Remove test pattern that is no longer needed. 2012-12-04 23:36:08 +01:00
François Revol
c9bb94092f U-Boot: cleanup
Remove commented asm code. We should use the U-Boot API later on.
2012-12-01 23:56:05 +01:00
François Revol
218af294af arm: Move spin() stub to the raspberry_pi cpu.cpp
This unbreaks the U-Boot build, since we already have spin()
in cpu.cpp there, for future implementation using the U-Boot API.
2012-12-01 23:56:05 +01:00
Michael Lotz
c5dbfbe5fc Remove early video init, don't need the debug output anymore. 2012-11-28 02:30:56 +01:00
Michael Lotz
32064fee1b Copy platform_start_kernel from uboot as well.
The kernel now starts on the rPi.
2012-11-28 02:30:56 +01:00
Michael Lotz
d95ecd7341 Remove empty devices implementation and use the one from uboot.
Since we have the same setup with a loaded and mapped boot archive, we
can reuse the MemoryDevice implemented in uboot. This gets the loader
to the stage where it loads and attempts to boot the kernel.
2012-11-28 02:30:37 +01:00
Michael Lotz
046e01014d Add boot archive base and size and map the boot archive.
An archive (ramfs) to be loaded can be specified in the raspberry pi
config.txt with a certain base address. We can use this to put our
floppy boot archive into memory on startup.

During the start procedure we now map that archive so we can later
load the kernel from it.
2012-11-28 02:00:00 +01:00
Michael Lotz
05e2d61a5e Fill the kernel args framebuffer config. 2012-11-28 01:41:05 +01:00
Michael Lotz
3c3b8858a1 Move framebuffer init past mmu_init and map the framebuffer.
Add more fields to arch framebuffer to hold the physical address and
size of the framebuffer. Then fill these in when mapping the
framebuffer to virtual memory.
2012-11-28 01:38:38 +01:00
Michael Lotz
87cedaf493 Fix more format strings for MMU trace output. 2012-11-28 01:35:42 +01:00
Michael Lotz
ebd0697853 Enable the early framebuffer and on-screen debug output. 2012-11-27 22:42:33 +01:00
Michael Lotz
18b04bdde1 Also hand debug output to the on-screen debug output. 2012-11-27 22:42:33 +01:00
Michael Lotz
75b481f2a4 Attach frame_buffer_console and initialize/enter blue_screen.
This enables early on-screen debug output on the raspberry pi.
2012-11-27 22:42:32 +01:00
Michael Lotz
94b364b469 Add blue_screen and frame_buffer_console into the bootloader.
These can be used for on-screen debug output with relatively little
effort, as they just need a plain framebuffer definition to work.

Some stubs are added to not clutter up the kernel sources with too
many ifdefs.
2012-11-27 22:41:47 +01:00
Michael Lotz
054ec8a776 Fix warnings by using format macros in debug output. 2012-11-27 20:58:32 +01:00
Michael Lotz
fc1ca8cb5a Initialize the BCM2708 arch framebuffer in platform_init_video. 2012-11-27 20:58:32 +01:00
Michael Lotz
8b9562633f Add BCM2708 arch framebuffer implementation for rPi.
It uses the mailbox mechanism to instruct the VideoCore to configure
the desired video mode and fills it with a black and white test
pattern.
2012-11-27 20:58:32 +01:00
Michael Lotz
57e6aff3f7 Add debug helpers that communicate information via the LED.
Blink patterns and delay mechanisms allow for "easier" debugging using
just the onboard LED on the raspberry pi.
2012-11-27 20:58:31 +01:00
Michael Lotz
0d92f5576d Allow getting and setting arch framebuffer config.
Making the fields protected allows them to be set by arch framebuffer
implementations. The getters can be used to retrieve the configuration
from outside the implementation.
2012-11-27 20:58:31 +01:00