2007-06-26: June Snapshot

**************
**********
* CONTENT
**********
**************

1. Build environment
2. Dice
3. Fiasco
4. Added/Removed L4 Packages
5. Changes in L4 Packages
    1.  bootstrap
    2.  cxx
    3.  dde
    4.  dde_linux
    5.  dm_phys
    6.  events
    7.  generic_io
    8.  generic_ts
    9.  input
    10. ipcmon
    11. l4env
    12. l4io
    13. l4rm
    14. l4sys
    15. l4util
    16. libc_backends_l4env
    17. libsigma0
    18. linux-24-headers
    19. loader
    20. lxfuxlibc
    21. names
    22. omega0
    23. ore
    24. roottask
    25. rtc
    26. sigma0
    27. simple_ts
    28. uclibc
    29. uclibc++
    
**************
**********
* 1. BUILD ENVIRONMENT
**********
**************
    * [Feature]:
        * Added ctags and etags commands, and a 'make *tags' command for l4/pkg

    * [Bugfix]:
        * Fixed DEFAULT_RELOC{_...} code in BID. Now DEFAULT_RELOC,
          DEFAULT_RELOC_<arch> and DEFAULT_RELOC_<target> may be used in the
          Makefiles. In every case the value of RAM_BASE is added to that value
          to calculate the particular link address. To access the link address
          in your own Makefile, you have to use $(call default_reloc,<target>).
        * Fixed MODE, differentiates between linux and host mode.
        * Added sanity check for proper OBJ_DIR and source dir.

    * [Changed]: 
        * Added support for STATIC files in the pkg dir of the build directory.

**************
**********
* 2. DICE
**********
**************
    * [Feature]:
        * Only set receive window in message buffer to environment's receive
          flexpage if we really received a flexpage.
        * Only set exception in environment if we received an exception (this
          might require to reset the environment in case of error in calling
          code).
        * Add [default_timeout] attribute: if attribute is set, IPC timeout is
          set using constant, default timeout values. Otherwise the
          environment's timeout member is used.
        * Add simplistic exception support for C back-end.
        * Add -fsyscall= option to allow optimization of kernel entry.

    * [Bugfix]:
        * Send two variable sized arrays into one direction.
        * Configure is more strict if bison/flex are missing.
        * Bootstrap version checks are more accurate now.
        * Building user's manual in builddir != srcdir.
        * Build fixes for Ubuntu.
        * Really scrub dice dir on 'make cleanall' (fixes some subsequent
          build errors experienced by some users).
        * No dependency on a configured L4 object-dir anymore.
        * C++ back-end fixes.
        * -s option did not generate *-sys.h[h] file.
        * Sending array of flexpages works for L4 V2.
        * Signdness issues in generated code.

    * [Changed]:
        * Removed the obsolete developer's manual.
        * Removed --with-l4dir configure option.
        * Removed the Common Data Representation back-end.

**************
**********
* 3. FIASCO
**********
**************
    * [Feature]:
        * Added memory resource limits to Fiasco.
          With these resource limits the kernel-memory usage of a set of tasks
          can be limited. The limits can be defined on task_new system calls.
          There are three possible modes for the limits of a new task:
                1. The new task shares the quota with the creator (quota
                   descriptor = 0).
                2. The new task shares the quota with another task T (where
                   the creator must be the chief of T).
                3. The new task gets a new quota, which is accounted to the
                   quota of a reference task T (where the creator must be the
                   chief of T).
        
        * Experimental fast user-level semaphore implementation: now the
          semaphore is correctly working with timeouts and thread destruction
          (as long as no thread currently within the critical section is
          killed).        
        * Added horizontal scroll feature to trace buffer view of kernel
          debugger (h and l keys).
 
    * [Changed]: 
        * Improved memory efficiency of Fiasco.
        * Moved from 64bit UIDs to 32bit UIDs for all architectures, no longer
          containing chief, site and nest IDs.
            * All architectures use the same ABI.
        * Improved UTCB support.
        * IPC: Extra argument: the message tag describes additional
          characteristics of the IPC (e.g. UTCB transfer sizes, FPU transfer).
          The kernel will also flag kernel generated IPC messages appropriately
          (page-fault, IO-page-fault, exception etc.). 
        * The UTCB layout has been changed.
        * Changed timeout format to X.2 format.
        * Added support IOPL 3 option in fiasco config: running with IOPL3 is
          now explicitely configured and may completely disabled IOPL3
          operations in user land (like cli/sti).
        * New interrupt handling doing low-level interrupt handling in the kernel.

    
**************
**********
* 4. ADDED/REMOVED L4 PACKAGES
**********
**************
    * Core packages: 
        * Added:
            - dde
            - dde_linux26
            - linux-26-headers
            - task
        * Removed:
            - exec

    * EMSCB packages:
        * Removed:
            - dde_linux26
            - linux-26-headers


**************
**********
* 5. CHANGES IN L4 PACKAGES
**********
**************
    Applies to all packages:

    * Adapted to ABI changes of Fiasco:
        * l4_threadid_t change to 32bit
        * Change of timeout format
        * Interrupt handling

    Note:
    * An IPC timeout pair can be specified with l4_ipc_timeout(snd_man,
      snd_exp, rcv_man, rcv_exp).
    * Additionally, the function l4util_microsecs2l4to returns an l4_timeout_s
      which is a single timeout, two of these timeouts can be combined by
      l4_timeout(snd, rcv) to an l4_timeout_t (for IPC). 


**************
* 1. bootstrap
**************
    * [Feature]: 
        * Added -modaddr command line switch to set modaddr directly in
          bootstrap which now relocates the modules. 
    
    * [Changed]:
        * Code cleanups

**************    
* 2. cxx
**************
    * [Bugfix]:
        * Count free objects in partial and empty slabs.

**************
* 3. dde
**************
    * [Feature]:
        * First release of the new DDE including
          * DDEKit - a construction kit for device driver environments
          * DDE_Linux 2.6 - a new implementation of DDE2.6 using DDEKit

**************    
* 4. dde_linux
**************
    * [Changed]:
        * Updated to Linux 2.4.34.4 so that it compiles with GCC4.
        * Adapted to new Fiasco timeout handling.
        * Added driver for es1370 (QEMU emulates this card via "-soundhw
          es1370").
        * Removed non-omega0 interrupt mode from dde_linux (Linux 2.4) new
          signature: int l4dde_irq_init(void).
            
**************
* 5. dm_phys
**************
    * [Bugfix]:
        * Always round memory regions to complete pages.
        * Fixed zero page bug.

    * [Changed]:
        * Use memory descriptors on all architectures. 

**************
* 6. events
**************
    * [Bugfix]:
        * Solved malloc-backend problem.

**************
* 7. generic_io
**************
    * [Bugfix]:
        * Dice related compile fix.

    * [Changed]: 
        * l4io_request_mem_region():
            * No longer returns offset value.
              * Supports (and uses by default) L4_PAGESIZE mappings.
        

**************
* 8. generic_ts
**************
    * [Changed]:
        * Disabled some functions based on the chief ID (superseeded by the
          new task library).
        * Added new doxygen configuration file. 

**************
* 9. input
**************
    * [Bugfix]:
        * [FEATURE]: Improved support for USB keyboards in PS/2 legacy mode
          with buggy BIOSes. It doesn't work with USB mice!

    * [Changed]:
        * libinput now depends on l4io.
        * Unified native and UX version of libinput
              - libinput detects on initialization if running under Fiasco-UX
              - libinput-ux.a no longer exists - please adapt your packages

**************
* 10. ipcmon
**************
    * [Feature]:
        * Introduce -r switch to express that all tasks are allowed to talk to
          roottask. This is needed:
              - for the tasks to find names
              - if roottask is not the chief of all tasks.
        
**************
* 11. l4env
**************
    * [Changed]:
        * Refactoring: env.h is now architecture independent.
        * Check for appropriate Fiasco ABI version on startup. 

**************
* 12. l4io
**************
    * [Feature]:
        * Added "--nomtrr" command line switch. This switch disables MTRR
          programming which needs IOPL3.
        * Enhanced Fiasco-UX support:
            - If running under UX, l4io now parses the virtual H/W descriptors
              and announces them to the res module.
              - l4io_request_mem_region() can now be used under UX and native
                Fiasco.
        * Added support for I/O port fpages:
            - l4io_request/release_region() changed a bit.
            - generic_io.idl uses an fpage array on request
            - L4io requests port ranges on client request - currently from
              roottask, which should be sigma0.
            - Simple I/O port test program.


    * [Changed]:
        * Updated to Linux 2.4.34.4, which is compatible to GCC4.
        * Adapted to new l4sys interface (caching/buffering flags in flex page).
        * Removed MTRR support - finally l4io (and the rest of the userland)
          works with IOPL0.    
        * Removed Ancient jiffies thread implementation. 
        * Adaption to generic_io changes.
          * MMIO: 
            * Requests MMIO regions from its pager (i.e., sigma0 because of
              roottask limitations) in compile-time option granularity (default
              is L4_PAGESIZE)
              * Does no longer request new MMIO region mappings from its pager
                for cacheable regions.
              * If MMIO regions share a page (some weird on-board controllers
                do that!), l4io no longer requests multiple mappings. Expect
                further changes here in   the context of "untrusted device
                drivers".
        * Completely removed PIC programming from omega0 and l4io. The applied
          changes depend on a recent Fiasco version (merged irq_ack_devel
          branch).
            * l4io:
                - Removed non-Omega0 interrupt mode. Command line switches
                  "--noirq", "--nosfn" and "--omega0" are no longer supported. 
                - Removed usage of CLI/STI from PCI code - the only module
                  depending on IOPL 3 is now MTRR programming.
            * omega0
                  - Added file headers.
                  - Removed pic.c/pic.h - use irq-devel branch of Fiasco.

            Fiasco supports IRQ handling completely without touching the PIC
              in user land:
            * L4V2 protocol:
                  - Receive from IRQ ID associates caller with this IRQ.
                  - Receive from NIL ID with L4_IPC_RECV_TIMEOUT_0
                    disassociates the caller from all interrupts. 
 
              * Recent Fiasco extended protocol:
                  - Send to IRQ ID with dw0==0 enables (unmasks) the IRQ.
                  - Send to IRQ ID with dw0==1 disassociates caller from this IRQ.

            Currently missing is an explicit "mask IRQ" function that is IMO
            not needed. Fiasco masks the IRQ on occurence and it is only
            unmasked on explicit request.

        * Removed non-omega0 interrupt mode from dde_linux (Linux 2.4) new
          signature: int l4dde_irq_init(void)
        * Adapted some users of dde_linux. 



**************
* 13. l4rm
**************
    * [Bugfix]:
        * Initialize dice-environment for every call to reset error conditions.

    * [Changed]:
        * Don't use some hard-coded value for vm-end, use the KIP!

**************
* 14. l4sys
**************
    * [Feature]:
        * Provided a data structure for the user level part of the fast
          user-level semaphore.

    * [Bugfix]:
        * Fixed PIC call IPC binding.    
        * Don't let gcc cache l4_myself and l4_nchief results. 

    * [Changed]:
        * Adapted to new Fiasco's timeout handling.
        * Adapted to new Fiasco's IPC format (message tag).
        * Adapted to Fiasco ABI changes: 
            - Restructured flex-page type definitions and added a true cache
              field to the memory flex page (no longer add bits to the raw
              values).
            - Removed a lot of code duplication among the architectures.
              - Proper interface to the 'Buffered' (IA32 write-combined)
                memory attributes supported by Fiasco. It is now no longer
                neccessary to use MTRRs for having non-cached but buffered
                device access to MMIO. However, the Fiasco kernel only supports
                buffered memory on IA32 PIII+ CPUs that have the page-attribute
                table feature. MTRRs are available from P6 on.
        * Added member to set the number of vital memory descriptors in the KIP. 
        * Added bindings for Fiasco user-level lock and semaphore. 
        * Cleaned up UTCB access functions.

**************
* 15. l4util
**************
    * [Changed]:
        * Changes regarding the use of memory descriptors.
        * Removed wait_queue implementation that uses cli/sti.
        * Removed l4util_l4to2micros prototype.
        

**************
* 16. libc_backends_l4env
**************
    * [Bugfix]:
        * Fixed alignment of the heap and allocation size for buddy
          allocations (required by buddy resp. slab impl.).
        * Slab part of buddy_slab_mem fixed. Before, it did only claim the
          first page of a grow set for its own which resulted in heap
          corruptions.

**************
* 17. libsigma0
**************
    * [Changed]:
        * Added #define for SIGMA0 thread ID. 

**************
* 18. linux-24-headers
**************
    * [Changed]:
        * Updated to Linux 2.4.34.4, which is compatible to GCC4. 

**************
* 19. loader
**************
    * [Feature]:
        * Added allow_bios and allow_vga options: note that l4linux now
          requires the allow_vga option when used with the VGA console!
        * Removed dummy page in loader as it was a communication channel for
          programs.

    * [Changed]:
        * Changes regarding memory descriptors.
        * Made pager cope with recent s0 requests.
        * Made pager cope with IPC types it doesn't know.
        * Added compile-time conditional tasklib support.
        * Removed exec related code, including idl interfaces.
        * Removed special l4linux(-2.2) reboot hook.

**************
* 20. lxfuxlibc
**************
    * [Bugfix]:
        * lx_fseek(): just return 0 or -1, as fseek does.

**************
* 21. names
**************
    * [Bugfix]:
        * Let the names demo wait for dm_phys in the beginning, so
        that its output is in a consistent state every time.
        * Fixed bug in names for query_id: if the function returns error (0),
          name should be set to 0, so the generated stubs won't try to call
          strlen on it.

**************    
* 22. omega0
**************
    * [Changed]:
        * Unified l4io's libomega0 and omega0 (management thread handling).
        * Support easy config of test duration. 
        * Removed some old OSKit related code from omega0. 

**************
* 23. ore
**************
    * [Feature]:
        *  Added support for SysKonnect GigaEthernet cards. 

    * [Bugfix]:
        * Let ORe behave like a good network interface, which means to not
          deliver a packet to the sender, even if the packet is a broadcast
          packet and the sender forged the source MAC (like the Linux ethernet
          bridge does...).
        * Race fixed. Someone (evil) might send us an EXIT event from a
          client, while the client tries to receive a packet at the same time.
          This may leave the rx list in an inconsistent state. Now we grab the
          channel lock before cleaning up and detect a closed connection during
          recv().
        * Fixed use-after-free bug that caused ORe to fault sometimes if a
          client's rx list was being cleaned up.
        * Fixed dubious use of goto in client-MAC initialization. 
        * Don't notify about dropped packets by default. 
        * Never do IRQ handling when using the loopback device. It only
          handles local clients and those will have received this packets
          already beforehand.
        * Sanity check some function arguments for not being NULL. 
        * Fixed bug in ORe MAC calculation: the ORe MAC is created by
          checksumming the device MAC (6 bytes) and the channel ID (4 bytes) and
          if we pack both into a char buffer, then of course the channel id
          starts at &buffer[6], not &buffer[7]. 
        * Fix pointer arithmetics error in arping example.
  
**************    
* 24. roottask
**************
    * [Bugfix]:
        * Fixed some issue when no modules given. 
        * Fixed some issue in module handling.
        * Fixed I/O protection detection.        
        * Made roottask behave nicer when it gets exceptions and other IPCs it
          cannot handle.

    * [Changed]:
        * Changes regarding tasklib support.

**************
* 25. rtc
**************
    * [Changed]:
        * No longer uses cli/sti.

**************
* 26. sigma0
**************
    * [Bugfix]:
        * Interpret KIP memory descriptor type 'dedicated' as memory not
          available to other applications. 

**************
* 27. simple_ts
**************
    * [Changed]:
        * Do not build simple_ts if tasklib is used.

**************
* 28. uclibc
**************
    * [Bugfix]:
        * Use pre-obj target to build include before objects. Support parallel
          building.

    * [Changed]:
        * Added ip.h. 

**************
* 29. uclibc++
**************
    * [Bugfix]:
        * Use pre-obj target to build include before objects. Support parallel
          building. 

