Home | History | Annotate | Download | only in iomd
History log of /src/sys/arch/arm/iomd/vidcvideo.c
RevisionDateAuthorComments
 1.51  05-Jan-2025  andvar Fix some typos in comments.
 1.50  27-Sep-2022  skrll Remove unnecessary sys/malloc.h include
 1.49  26-Dec-2021  andvar fix various typos, mainly in comments.
 1.48  20-Aug-2021  andvar fix various typos in comments and log messages.
 1.47  07-Aug-2021  thorpej Merge thorpej-cfargs2.
 1.46  24-Apr-2021  thorpej branches: 1.46.8;
Merge thorpej-cfargs branch:

Simplify and make extensible the config_search() / config_found() /
config_attach() interfaces: rather than having different variants for
which arguments you want pass along, just have a single call that
takes a variadic list of tag-value arguments.

Adjust all call sites:
- Simplify wherever possible; don't pass along arguments that aren't
actually needed.
- Don't be explicit about what interface attribute is attaching if
the device only has one. (More simplification.)
- Add a config_probe() function to be used in indirect configuiration
situations, making is visibly easier to see when indirect config is
in play, and allowing for future change in semantics. (As of now,
this is just a wrapper around config_match(), but that is an
implementation detail.)

Remove unnecessary or redundant interface attributes where they're not
needed.

There are currently 5 "cfargs" defined:
- CFARG_SUBMATCH (submatch function for direct config)
- CFARG_SEARCH (search function for indirect config)
- CFARG_IATTR (interface attribte)
- CFARG_LOCATORS (locators array)
- CFARG_DEVHANDLE (devhandle_t - wraps OFW, ACPI, etc. handles)

...and a sentinel value CFARG_EOL.

Add some extra sanity checking to ensure that interface attributes
aren't ambiguous.

Use CFARG_DEVHANDLE in MI FDT, OFW, and ACPI code, and macppc and shark
ports to associate those device handles with device_t instance. This
will trickle trough to more places over time (need back-end for pre-OFW
Sun OBP; any others?).
 1.45  24-Jan-2018  riastradh branches: 1.45.18;
Fix integer overflows noted by Silvio Cesare of InfoSect.

Someone^TM should name these idioms so we can eliminate this class of
copypasta bug.
 1.44  21-Jan-2014  christos tuck in variables that are only used in the #if 0 block
 1.43  14-May-2012  skrll branches: 1.43.2; 1.43.4;
device_t/softc split
struct device * -> device_t
struct cfdata * -> cfdata_t
Use aprint*
 1.42  10-May-2012  skrll u_int*_t -> uint*_t
 1.41  14-Feb-2012  skrll Whitespace in previous.

Ride previous releng OK.
 1.40  14-Feb-2012  skrll Pass RI_NO_AUTO to rasops_init so that rasops doesn't attempt to allocate
memory as we're too early in kernel startup for this.

My A7000 boots now.

OK releng. ack 3 nak 0.
 1.39  01-Jul-2011  dyoung branches: 1.39.2; 1.39.6;
#include <sys/bus.h> instead of <machine/bus.h>.
 1.38  21-Oct-2009  snj Remove 3rd and 4th clauses. OK'd by Tohru Nishimura and Reinoud Zandijk
(copyright holders).
 1.37  18-Mar-2009  cegger bzero -> memset
 1.36  14-Mar-2009  dsl Change about 4500 of the K&R function definitions to ANSI ones.
There are still about 1600 left, but they have ',' or /* ... */
in the actual variable definitions - which my awk script doesn't handle.
There are also many that need () -> (void).
(The script does handle misordered arguments.)
 1.35  29-Apr-2008  matt branches: 1.35.8; 1.35.14;
Change IPL_LEVELS to NIPL.
current_spl_level is dead.
 1.34  29-Feb-2008  chris branches: 1.34.2; 1.34.4;
Misc updates to hopefully improve vidcvideo console usability:
* add virtual consoles by using wsdisplay_vcons
* make use of generic scrollback support for consoles
* enable colour support for vidcvideo consoles
* use the default NetBSD font, rather than picking a sony one
* make kernel output green, so it's obvious.

This was tested at 800x600 in 8bpp on an A7000+ and 2MB VRAM RiscPC.

To actually benefit from these changes wscons=YES needs to be added to
your rc.conf
 1.33  05-Feb-2008  chris branches: 1.33.2; 1.33.6;
Fix up vidcvideo to be useable on a Write-Back processor, IE StrongArm,
during boot and ddb.

This is done by routing all requests for changes to the screen into one
function. The function can then determine if interrupts are enabled or
disabled, and either flush them to screen immediately or set them up for
the next flyback irq.

Also if we have nothing to do, disable the flyback irq, and re-enable when
we have something to do. This avoids taking an interrupt for every vsync,
IE 50-75Hz, just to do nothing.

This makes ddb usable and the boot dmesg visable with an SA.

lmbench now reports that the A7000+ has a 14Mhz CPU, rather than 4Mhz
(it's actually 48Mhz)

Tested on SA Risc-PC and A7000+
 1.32  03-Feb-2008  chris Use memmove rather than memcpy when moving rows around the framebuffer.

This fixes a problem where scrolling down fills the whole screen with the
first line on screen.
 1.31  04-Mar-2007  christos branches: 1.31.16; 1.31.20; 1.31.22; 1.31.28;
Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.30  24-Jan-2007  hubertf branches: 1.30.2;
Remove duplicate #includes, patch contributed in private mail
by Slava Semushin <slava.semushin@gmail.com>.

To verify that no nasty side effects of duplicate includes (or their
removal) have an effect here, I've compiled an i386/ALL kernel with
and without the patch, and the only difference in the resulting .o
files was in shifted line numbers in some assert() calls.
The comparison of the .o files was based on the output of "objdump -D".

Thanks to martin@ for the input on testing.
 1.29  21-Oct-2006  bjh21 Remove cruft left over from when this code was copied from some TURBOchannel
framebuffer or other.
 1.28  19-Aug-2006  bjh21 branches: 1.28.2; 1.28.4;
Arrange things so that if MONITOR isn't defined in the kernel configration,
we use the standard mode list from videomode.c rather than one generated
by makemodes.awk. This is less useful than it might be since without a useful
frame rate from the bootloader we're likely to end up choosing a screen mode
that's either flickery or too fast for the monitor (or DRAM bandwidth).
 1.27  17-Aug-2006  bjh21 Switch to using the MI struct videomode for storing VIDC video timings.
struct videomode doesn't have a way to record border widths (though I
wonder if VESA's "margins" are the same thing), so we now just treat them
as zero. Tested on my NC, which still seems to be working.
 1.26  05-Aug-2006  bjh21 bcopy -> memcpy
bzero -> memset
 1.25  05-Aug-2006  bjh21 ANSIfy, un-__P, and generally KNF.
 1.24  25-Apr-2006  snj s/allready/already/
 1.23  15-Apr-2006  jmmv Remove the getwschar and putwschar accessops from wsdisplay drivers as
requested by uwe@. These were wrong because they were receiving an
emulcookie yet they were accessops (thus having to receive an accesscookie).
Instead, just handle the WSDISPLAYIO_{GET,PUT}WSCHAR ioctls from the
driver's ioctl accessop.

As this reduces the amount of code needed to handle these operations to
two small functions in each driver, remove the WSDISPLAY_CHARFUNCS kernel
option.

Reviewed by, at least, uwe@ and macallan@. No objections in tech-kern@.
 1.22  12-Apr-2006  jmmv Add an extra cookie to the ioctl and mmap wsdisplay accessops that points
to the screen on which they are being called. The driver cannot guess
this by itself but it is needed to implement, at least, the getwschar and
putwschar functions in the correct place. There are no functional changes
yet.

Tested on i386 (vga, vga_raster, machfb, vesafb), macppc and sparc64.
Suggested and reviewed by macallan@.
 1.21  11-Dec-2005  christos branches: 1.21.4; 1.21.6; 1.21.8; 1.21.10; 1.21.12;
merge ktrace-lwp.
 1.20  13-Nov-2003  chs branches: 1.20.16;
eliminate uvm_useracc() in favor of checking the return value of
copyin() or copyout().

uvm_useracc() tells us whether the mapping permissions allow access to
the desired part of an address space, and many callers assume that
this is the same as knowing whether an attempt to access that part of
the address space will succeed. however, access to user space can
fail for reasons other than insufficient permission, most notably that
paging in any non-resident data can fail due to i/o errors. most of
the callers of uvm_useracc() make the above incorrect assumption. the
rest are all misguided optimizations, which optimize for the case
where an operation will fail. we'd rather optimize for operations
succeeding, in which case we should just attempt the access and handle
failures due to insufficient permissions the same way we handle i/o
errors. since there appear to be no good uses of uvm_useracc(), we'll
just remove it.
 1.19  07-Nov-2003  he Suppress apparently-bogus -Wunitialized warnings, the compiler does
not detect that set / use occur under equal conditions in following
if() statements.
 1.18  24-Oct-2003  chris Don't pass NULL as an integer.
 1.17  06-May-2003  reinoud branches: 1.17.2;
Some entries were missing so i'd better add them for completion.
 1.16  02-Oct-2002  thorpej Add trailing ; to CFATTACH_DECL
 1.15  01-Oct-2002  thorpej Use CFATTACH_DECL().
 1.14  06-Aug-2002  itojun integer overflow. from silvio@qualys.com
 1.13  04-Jul-2002  junyoung alloc_attr -> allocattr

Approved by Matthias Drochner.
 1.12  19-Jun-2002  bjh21 Move over to using a 6:5:5 R:G:B palette in 16-bit display modes, and abstract
the palette generation to work with arbitrary numbers of bits.
This allows X to work after a fashion, since it tries to put the VIDC into
a 6:5:5 mode itself (which we ignore). Anything that actually tries to take
advantage of the DirectColor visual it offers will still be screwed, but I
hope such applications are rare.
 1.11  03-Apr-2002  reinoud branches: 1.11.2; 1.11.4;
Fix the mmap'ing of the screen memory. The way it was implemented
completely sucked... I wonder how it was even working (....)

Thanks to Jason for pointing out the problem.
 1.10  24-Mar-2002  thorpej * arm_byte_to_page() -> arm_btop()
* arm_page_to_byte() -> arm_ptob()
 1.9  23-Mar-2002  reinoud Big rototil of the vidcvideo code to cleanup illogical structures and to
incorporate write back support for processors not having a write through
cache.

The current fb_devconfig structure now really holds the device's
configuration and the softc really only holds the attachment information.
This used to be mixed giving rise to weird stuctures and cross references.

The number of vertical syncs before the video memory writeback is triggered
is configurable ... default is to wait for 5 Vsync .. aprox minumum 10
times a second, but more likely in the order of 12,5 times a second. When
printing is in progress no write back is performed... only after the
waiting time. The reasoning behind this is that as long as the screen is
printed too the cache will be purged of dirty data anyway due to the
processing and new screen memory useage.
 1.8  23-Mar-2002  reinoud Fix up typos.
 1.7  23-Mar-2002  reinoud Fix typo.
 1.6  23-Mar-2002  reinoud Allthough this patch doesn't look that much it adds a few things that were
on the port-acorn32's TODO list for quite some time :

- when the serial console is selected, don't exclude the screen
alltogether; currently the keyboard is still not attached but that might be
a configuration problem in the GENERIC console or a failure to explicitly
connect to a wsmux. This needs further investigation.

- create a framework for the display memory writeback on vsync for
StrongARM processors since they don't have a write-trough cache. This is to
solve the lazy screen update that is very evident in single user mode on
these processors; the cache isn't flushed/written back that often and parts
of the screen can thus be resident in the cache but not written out to
memory yet.

- clean up some loose ends in the code.
 1.5  17-Mar-2002  atatat Convert ioctl code to use EPASSTHROUGH instead of -1 or ENOTTY for
indicating an unhandled "command". ERESTART is -1, which can lead to
confusion. ERESTART has been moved to -3 and EPASSTHROUGH has been
placed at -4. No ioctl code should now return -1 anywhere. The
ioctl() system call is now properly restartable.
 1.4  13-Mar-2002  ad Reorganise the wsfont stuff slightly so that multiple display adapters
with different bit/byte order requirements can co-exist happily.
 1.3  18-Feb-2002  bjh21 Add a prototype for vidcvideo_config_wscons().
 1.2  27-Nov-2001  thorpej branches: 1.2.2;
Use <machine/intr.h> rather than <machine/irqhandler.h>
 1.1  05-Oct-2001  reinoud branches: 1.1.4;
Initial commit of the splitting off of arch/acorn32 from arch/arm32.

The IOMD/VIDC combination is now moved to arch/arm/iomd together. These
files still need a lot of cleaning up :( .... esp. the RC7500 support that
is still dormant in it; this needs either to be removed or split out for
RC7500's ``VIDC'' video/audio variant.

Apart from the RC7500 support wich is still in arch/arm32 the
iomd,vidc,riscpc and podulebus subdirectories of arch/arm32 can be removed.

This split still uses some small parts of arch/arm32 .... those are the MI
parts that haven't been moved yet.

RiscPC/A7000 have been tested and confirmed to build as should NC.
 1.1.4.8  18-Oct-2002  nathanw Catch up to -current.
 1.1.4.7  13-Aug-2002  nathanw Catch up to -current.
 1.1.4.6  01-Aug-2002  nathanw Catch up to -current.
 1.1.4.5  17-Apr-2002  nathanw Catch up to -current.
 1.1.4.4  01-Apr-2002  nathanw Catch up to -current.
(CVS: It's not just a program. It's an adventure!)
 1.1.4.3  28-Feb-2002  nathanw Catch up to -current.
 1.1.4.2  08-Jan-2002  nathanw Catch up to -current.
 1.1.4.1  05-Oct-2001  nathanw file vidcvideo.c was added on branch nathanw_sa on 2002-01-08 00:23:16 +0000
 1.2.2.6  10-Oct-2002  jdolecek sync kqueue with -current; this includes merge of gehenna-devsw branch,
merge of i386 MP branch, and part of autoconf rototil work
 1.2.2.5  06-Sep-2002  jdolecek sync kqueue branch with HEAD
 1.2.2.4  23-Jun-2002  jdolecek catch up with -current on kqueue branch
 1.2.2.3  16-Mar-2002  jdolecek Catch up with -current.
 1.2.2.2  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.2.2.1  27-Nov-2001  thorpej file vidcvideo.c was added on branch kqueue on 2002-01-10 19:38:21 +0000
 1.11.4.2  07-Aug-2002  lukem Pull up revision 1.14 (requested by itojun in ticket #616):
integer overflow. from silvio@qualys.com
 1.11.4.1  21-Jun-2002  lukem Pull up revision 1.12 (requested by bjh21 in ticket #328):
Move over to using a 6:5:5 R:G:B palette in 16-bit display modes, and abstract
the palette generation to work with arbitrary numbers of bits.
This allows X to work after a fashion, since it tries to put the VIDC into
a 6:5:5 mode itself (which we ignore). Anything that actually tries to take
advantage of the DirectColor visual it offers will still be screwed, but I
hope such applications are rare.
 1.11.2.2  30-Aug-2002  gehenna catch up with -current.
 1.11.2.1  16-Jul-2002  gehenna catch up with -current.
 1.17.2.4  21-Nov-2004  skrll Adapt to branch
 1.17.2.3  21-Sep-2004  skrll Fix the sync with head I botched.
 1.17.2.2  18-Sep-2004  skrll Sync with HEAD.
 1.17.2.1  03-Aug-2004  skrll Sync with HEAD
 1.20.16.7  17-Mar-2008  yamt sync with head.
 1.20.16.6  11-Feb-2008  yamt sync with head.
 1.20.16.5  04-Feb-2008  yamt sync with head.
 1.20.16.4  03-Sep-2007  yamt sync with head.
 1.20.16.3  26-Feb-2007  yamt sync with head.
 1.20.16.2  30-Dec-2006  yamt sync with head.
 1.20.16.1  21-Jun-2006  yamt sync with head.
 1.21.12.1  24-May-2006  tron Merge 2006-05-24 NetBSD-current into the "peter-altq" branch.
 1.21.10.2  11-May-2006  elad sync with head
 1.21.10.1  19-Apr-2006  elad sync with head - hopefully this will work
 1.21.8.3  03-Sep-2006  yamt sync with head.
 1.21.8.2  11-Aug-2006  yamt sync with head
 1.21.8.1  24-May-2006  yamt sync with head.
 1.21.6.2  01-Jun-2006  kardel Sync with head.
 1.21.6.1  22-Apr-2006  simonb Sync with head.
 1.21.4.1  09-Sep-2006  rpaulo sync with head
 1.28.4.1  22-Oct-2006  yamt sync with head
 1.28.2.2  01-Feb-2007  ad Sync with head.
 1.28.2.1  18-Nov-2006  ad Sync with head.
 1.30.2.1  12-Mar-2007  rmind Sync with HEAD.
 1.31.28.1  18-Feb-2008  mjf Sync with HEAD.
 1.31.22.1  23-Mar-2008  matt sync with HEAD
 1.31.20.4  21-Mar-2008  chris Sync with head.
 1.31.20.3  09-Feb-2008  chris Fixup vidcvideo, current_spl_level is replaced with current_ipl_level.
 1.31.20.2  09-Feb-2008  chris Sync to HEAD.
 1.31.20.1  09-Feb-2008  chris Add initial reworking of acorn32 to use new interrupt code.

Note that cats probably won't work currently as acorn32 changed the way
that the pic is registered, it has to provide the irq lines as on acorn32
we attach the iomd after we need to register irqs for the pioc. So we
setup the irqs for iomd before malloc etc are available. This needs
to be fixed.

More work is still needed to update most of the podulebus drivers.
First I need to add podulebus wrapper for interrupts that handles the
maskaddr and maskbits. Exposing them to the common irq code is wrong.
 1.31.16.1  28-Feb-2008  rjs Sync with HEAD.
 1.33.6.2  02-Jun-2008  mjf Sync with HEAD.
 1.33.6.1  03-Apr-2008  mjf Sync with HEAD.
 1.33.2.1  24-Mar-2008  keiichi sync with head.
 1.34.4.3  11-Mar-2010  yamt sync with head
 1.34.4.2  04-May-2009  yamt sync with head.
 1.34.4.1  16-May-2008  yamt sync with head.
 1.34.2.1  18-May-2008  yamt sync with head.
 1.35.14.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.35.8.1  28-Apr-2009  skrll Sync with HEAD.
 1.39.6.2  02-Jun-2012  mrg sync to latest -current.
 1.39.6.1  18-Feb-2012  mrg merge to -current.
 1.39.2.3  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.39.2.2  23-May-2012  yamt sync with head.
 1.39.2.1  17-Apr-2012  yamt sync with head
 1.43.4.1  18-May-2014  rmind sync with head
 1.43.2.1  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.45.18.1  21-Mar-2021  thorpej Give config_found() the same variadic arguments treatment as
config_search(). This commit only adds the CFARG_EOL sentinel
to the existing config_found() calls. Conversion of config_found_sm_loc()
and config_found_ia() call sites will be in subsequent commits.
 1.46.8.1  04-Aug-2021  thorpej Adapt to CFARGS().

RSS XML Feed