freebsd-dev/sys
Marcel Moolenaar 7ef5e8bc80 Better support memory mapped console devices, such as VGA and EFI
frame buffers and memory mapped UARTs.

1.  Delay calling cninit() until after pmap_bootstrap(). This makes
    sure we have PMAP initialized enough to add translations. Keep
    kdb_init() after cninit() so that we have console when we need
    to break into the debugger on boot.
2.  Unfortunately, the ATPIC code had be moved as well so as to
    avoid a spurious trap #30. The reason for which is not known
    at this time.
3.  In pmap_mapdev_attr(), when we need to map a device prior to the
    VM system being initialized, use virtual_avail as the KVA to map
    the device at. In particular, avoid using the direct map on amd64
    because we can't demote by virtue of not being able to allocate
    yet. Keep track of the translation.
    Re-use the translation after the VM has been initialized to not
    waste KVA and to satisfy the assumption in uart(4) that the handle
    returned for the low-level console is the same as later returned
    when the device is probed and attached.
4.  In pmap_unmapdev() remove the mapping from the table when called
    pre-init. Otherwise keep the mapping. During bus probe and attach
    device resources are mapped and unmapped multiple times, which
    would have us destroy the mapping used by the low-level console.
5.  In pmap_init(), set pmap_initialized to signal that we're not
    pre-init anymore. On amd64, bring the direct map in sync with the
    translations created at that time.
6.  Implement bus_space_map() and bus_space_unmap() for real: when
    the tag corresponds to memory space, call the corresponding
    pmap_mapdev() and pmap_unmapdev() functions to construct and
    actual handle.
7.  In efifb.c and vt_vga.c, remove the crutches and hacks and simply
    call pmap_mapdev_attr() or bus_space_map() as desired.

Notes:
1.  uart(4) already used bus_space_map() during low-level console
    setup but since serial ports have traditionally been I/O port
    based, the lack of a proper implementation for said function
    was not a problem. It has always supported memory mapped UARTs
    for low-level consoles by setting hw.uart.console accordingly.
2.  The use of the direct map on amd64 without setting caching
    attributes has been a bigger problem than previously thought.
    This change has the fortunate (and unexpected) side-effect of
    fixing various EFI frame buffer problems (though not all).

PR: 191564, 194952

Special thanks to:
1.  XipLink, Inc -- generously donated an Intel Bay Trail E3800
    based eval board (ADLE3800PC).
2.  The FreeBSD Foundation, in particular emaste@ -- for UEFI
    support in general and testing.
3.  Everyone who tested the proposed for PR 191564.
4.  jhb@ and kib@ for being a soundboard and applying a clue bat
    if so needed.
2015-08-12 15:26:32 +00:00
..
amd64 Better support memory mapped console devices, such as VGA and EFI 2015-08-12 15:26:32 +00:00
arm Make this compile again when PPS_SYNC is defined. Also remove a couple 2015-08-11 19:25:26 +00:00
arm64 Check the correct value in db_validate_address, pmap_extract returns 0 on 2015-08-11 12:32:17 +00:00
boot Remove guards around overwriting loader.rc and menu.rc 2015-08-06 16:07:27 +00:00
bsm
cam Remove verbose CTL messages. 2015-08-09 09:54:29 +00:00
cddl Fix set of sign extension bugs in r286625. 2015-08-12 08:36:58 +00:00
compat Use CAP_EVENT instead of CAP_PDWAIT. 2015-08-12 11:07:03 +00:00
conf Better support memory mapped console devices, such as VGA and EFI 2015-08-12 15:26:32 +00:00
contrib If any function fail (the ptr variable will be equal to NULL), we shouldn't 2015-08-11 18:17:31 +00:00
crypto const'ify an arg that we don't update... 2015-07-29 23:37:15 +00:00
ddb Make kstack_pages a tunable on arm, x86, and powepc. On i386, the 2015-08-10 17:18:21 +00:00
dev Better support memory mapped console devices, such as VGA and EFI 2015-08-12 15:26:32 +00:00
fs The changes that introduced fo_mmap() treated all character device 2015-08-06 16:50:37 +00:00
gdb
geom Clean out some externally visible "more then" grammar 2015-08-11 03:12:09 +00:00
gnu
i386 Better support memory mapped console devices, such as VGA and EFI 2015-08-12 15:26:32 +00:00
isa
kern Unignore signals when starting CloudABI processes. 2015-08-12 11:30:31 +00:00
kgssapi
libkern Remove checks for __ARM_EABI__, we only build for EABI now. 2015-07-09 21:02:40 +00:00
mips Rationalize BSD license on sys/*/include/in_cksum.h 2015-08-05 19:05:12 +00:00
modules Build the iwm and iwmfw modules by default on x86. 2015-08-08 21:09:41 +00:00
net Use single 'lle_timer' callout in lltable instead of 2015-08-11 12:38:54 +00:00
net80211 Revert the wifi ifnet changes until things are more baked and tested. 2015-08-08 01:10:17 +00:00
netgraph * Address review (and add a bit myself). 2015-07-12 18:14:38 +00:00
netinet Use single 'lle_timer' callout in lltable instead of 2015-08-11 12:38:54 +00:00
netinet6 Use single 'lle_timer' callout in lltable instead of 2015-08-11 12:38:54 +00:00
netipsec Make IPsec work with AES-GCM and AES-ICM (aka CTR) in OCF... IPsec 2015-08-04 17:47:11 +00:00
netnatm
netpfil Use correct src/dst ports when removing states. 2015-08-11 17:24:34 +00:00
netsmb
nfs
nfsclient
nfsserver
nlm
ofed ipv4_is_zeronet() and ipv4_is_loopback() expect an address in network 2015-08-07 18:30:11 +00:00
opencrypto Make IPsec work with AES-GCM and AES-ICM (aka CTR) in OCF... IPsec 2015-08-04 17:47:11 +00:00
pc98 Remove unused i386 header privatespace.h. For the native kernel, its 2015-08-07 05:59:58 +00:00
powerpc Make kstack_pages a tunable on arm, x86, and powepc. On i386, the 2015-08-10 17:18:21 +00:00
rpc Remove useless acquire semantic from the atomic_add operation before 2015-07-28 06:58:10 +00:00
security fd: make 'rights' a manadatory argument to fget* functions 2015-07-05 19:05:16 +00:00
sparc64 Rationalize BSD license on sys/*/include/in_cksum.h 2015-08-05 19:05:12 +00:00
sys Instead of defining the actualy user and group id in the drmP.h files 2015-08-11 16:51:44 +00:00
teken
tools
ufs - Make 'struct buf *buf' private to vfs_bio.c. Having a global variable 2015-07-29 02:26:57 +00:00
vm Make kstack_pages a tunable on arm, x86, and powepc. On i386, the 2015-08-10 17:18:21 +00:00
x86 Better support memory mapped console devices, such as VGA and EFI 2015-08-12 15:26:32 +00:00
xdr
xen Add support for Xen blkif indirect segment I/Os. This makes it possible for 2015-07-30 03:50:01 +00:00
Makefile Kill EoL whitespace. 2015-05-29 14:03:07 +00:00