Rather than use numerical offsets, use the proper register names as used in the QEMU TCX hardware acceleration patch.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk --- openbios-devel/drivers/tcx.fs | 132 ++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 66 deletions(-)
diff --git a/openbios-devel/drivers/tcx.fs b/openbios-devel/drivers/tcx.fs index e1ec5ad..d682e35 100644 --- a/openbios-devel/drivers/tcx.fs +++ b/openbios-devel/drivers/tcx.fs @@ -72,54 +72,54 @@ fcode-version3 \ Registers \
-h# 0 constant tcx-off1 -h# 10000 constant /tcx-off1 +h# 0 constant tcx-off-rom +h# 10000 constant /tcx-off-rom
-h# 200000 constant tcx-off-dac -h# 4000 constant /tcx-off-dac-24 -h# 4 constant /tcx-off-dac-8 +h# 200000 constant tcx-off-cmap +h# 4000 constant /tcx-off-cmap-24 +h# 4 constant /tcx-off-cmap-8
-h# 240000 constant tcx-off3 -h# 4000 constant /tcx-off3-24 -h# 4 constant /tcx-off3-8 +h# 240000 constant tcx-off-dhc +h# 4000 constant /tcx-off-dhc-24 +h# 4 constant /tcx-off-dhc-8
-h# 280000 constant tcx-off4 -h# 8000 constant /tcx-off4-24 -h# 1 constant /tcx-off4-8 +h# 280000 constant tcx-off-alt +h# 8000 constant /tcx-off-alt-24 +h# 1 constant /tcx-off-alt-8
-h# 301000 constant tcx-off5-24 -h# 300000 constant tcx-off5-8 -h# 1000 constant /tcx-off5-24 -h# 81c constant /tcx-off5-8 +h# 301000 constant tcx-off-thc-24 +h# 300000 constant tcx-off-thc-8 +h# 1000 constant /tcx-off-thc-24 +h# 81c constant /tcx-off-thc-8
-h# 700000 constant tcx-off6 -h# 1000 constant /tcx-off6 +h# 700000 constant tcx-off-tec +h# 1000 constant /tcx-off-tec
-h# 800000 constant tcx-off-fb -h# 100000 constant /tcx-off-fb +h# 800000 constant tcx-off-dfb8 +h# 100000 constant /tcx-off-dfb8
-h# 2000000 constant tcx-off8 -h# 400000 constant /tcx-off8-24 -h# 1 constant /tcx-off8-8 +h# 2000000 constant tcx-off-dfb24 +h# 400000 constant /tcx-off-dfb24-24 +h# 1 constant /tcx-off-dfb24-8
-h# 4000000 constant tcx-off9 -h# 400000 constant /tcx-off9-24 -h# 1 constant /tcx-off9-8 +h# 4000000 constant tcx-off-stip +h# 400000 constant /tcx-off-stip-24 +h# 1 constant /tcx-off-stip-8
-h# 6000000 constant tcx-off10 -h# 800000 constant /tcx-off10 +h# 6000000 constant tcx-off-blit +h# 800000 constant /tcx-off-blit
-h# a000000 constant tcx-off11 -h# 400000 constant /tcx-off11-24 -h# 1 constant /tcx-off11-8 +h# a000000 constant tcx-off-rdfb32 +h# 400000 constant /tcx-off-rdfb32-24 +h# 1 constant /tcx-off-rdfb32-8
-h# c000000 constant tcx-off12 -h# 800000 constant /tcx-off12-24 -h# 1 constant /tcx-off12-8 +h# c000000 constant tcx-off-rstip +h# 800000 constant /tcx-off-rstip-24 +h# 1 constant /tcx-off-rstip-8
-h# e000000 constant tcx-off13 -h# 800000 constant /tcx-off13-24 -h# 1 constant /tcx-off13-8 +h# e000000 constant tcx-off-rblit +h# 800000 constant /tcx-off-rblit-24 +h# 1 constant /tcx-off-rblit-8
: >tcx-reg-spec ( offset size -- encoded-reg )
r 0 my-address d+ my-space encode-phys r> encode-int encode+
@@ -127,37 +127,37 @@ h# 1 constant /tcx-off13-8
: tcx-8bit-reg \ WARNING: order is important (at least to Solaris) - tcx-off-fb /tcx-off-fb >tcx-reg-spec - tcx-off8 /tcx-off8-8 >tcx-reg-spec encode+ - tcx-off9 /tcx-off9-8 >tcx-reg-spec encode+ - tcx-off10 /tcx-off10 >tcx-reg-spec encode+ - tcx-off11 /tcx-off11-8 >tcx-reg-spec encode+ - tcx-off12 /tcx-off12-8 >tcx-reg-spec encode+ - tcx-off13 /tcx-off13-8 >tcx-reg-spec encode+ - tcx-off6 /tcx-off6 >tcx-reg-spec encode+ - tcx-off-dac /tcx-off-dac-8 >tcx-reg-spec encode+ - tcx-off5-8 /tcx-off5-8 >tcx-reg-spec encode+ - tcx-off1 /tcx-off1 >tcx-reg-spec encode+ - tcx-off3 /tcx-off3-8 >tcx-reg-spec encode+ - tcx-off4 /tcx-off4-8 >tcx-reg-spec encode+ + tcx-off-dfb8 /tcx-off-dfb8 >tcx-reg-spec + tcx-off-dfb24 /tcx-off-dfb24-8 >tcx-reg-spec encode+ + tcx-off-stip /tcx-off-stip-8 >tcx-reg-spec encode+ + tcx-off-blit /tcx-off-blit >tcx-reg-spec encode+ + tcx-off-rdfb32 /tcx-off-rdfb32-8 >tcx-reg-spec encode+ + tcx-off-rstip /tcx-off-rstip-8 >tcx-reg-spec encode+ + tcx-off-rblit /tcx-off-rblit-8 >tcx-reg-spec encode+ + tcx-off-tec /tcx-off-tec >tcx-reg-spec encode+ + tcx-off-cmap /tcx-off-cmap-8 >tcx-reg-spec encode+ + tcx-off-thc-8 /tcx-off-thc-8 >tcx-reg-spec encode+ + tcx-off-rom /tcx-off-rom >tcx-reg-spec encode+ + tcx-off-dhc /tcx-off-dhc-8 >tcx-reg-spec encode+ + tcx-off-alt /tcx-off-alt-8 >tcx-reg-spec encode+ " reg" property ;
: tcx-24bit-reg \ WARNING: order is important (at least to Solaris) - tcx-off-fb /tcx-off-fb >tcx-reg-spec - tcx-off8 /tcx-off8-24 >tcx-reg-spec encode+ - tcx-off9 /tcx-off9-24 >tcx-reg-spec encode+ - tcx-off10 /tcx-off10 >tcx-reg-spec encode+ - tcx-off11 /tcx-off11-24 >tcx-reg-spec encode+ - tcx-off12 /tcx-off12-24 >tcx-reg-spec encode+ - tcx-off13 /tcx-off13-24 >tcx-reg-spec encode+ - tcx-off6 /tcx-off6 >tcx-reg-spec encode+ - tcx-off-dac /tcx-off-dac-24 >tcx-reg-spec encode+ - tcx-off5-24 /tcx-off5-24 >tcx-reg-spec encode+ - tcx-off1 /tcx-off1 >tcx-reg-spec encode+ - tcx-off3 /tcx-off3-24 >tcx-reg-spec encode+ - tcx-off4 /tcx-off4-24 >tcx-reg-spec encode+ + tcx-off-dfb8 /tcx-off-dfb8 >tcx-reg-spec + tcx-off-dfb24 /tcx-off-dfb24-24 >tcx-reg-spec encode+ + tcx-off-stip /tcx-off-stip-24 >tcx-reg-spec encode+ + tcx-off-blit /tcx-off-blit >tcx-reg-spec encode+ + tcx-off-rdfb32 /tcx-off-rdfb32-24 >tcx-reg-spec encode+ + tcx-off-rstip /tcx-off-rstip-24 >tcx-reg-spec encode+ + tcx-off-rblit /tcx-off-rblit-24 >tcx-reg-spec encode+ + tcx-off-tec /tcx-off-tec >tcx-reg-spec encode+ + tcx-off-cmap /tcx-off-cmap-24 >tcx-reg-spec encode+ + tcx-off-thc-24 /tcx-off-thc-24 >tcx-reg-spec encode+ + tcx-off-rom /tcx-off-rom >tcx-reg-spec encode+ + tcx-off-dhc /tcx-off-dhc-24 >tcx-reg-spec encode+ + tcx-off-alt /tcx-off-alt-24 >tcx-reg-spec encode+ " reg" property ;
@@ -198,11 +198,11 @@ headerless \
: dac-map - tcx-off-dac /tcx-dac do-map-in to tcx-dac + tcx-off-cmap /tcx-dac do-map-in to tcx-dac ;
: fb-map - tcx-off-fb h# c0000 do-map-in to fb-addr + tcx-off-dfb8 h# c0000 do-map-in to fb-addr ;
: map-regs @@ -240,11 +240,11 @@ headerless \ Handle differences between 8-bit/24-bit mode depth-bits 8 = if tcx-8bit-reg - /tcx-off-dac-8 to /tcx-dac + /tcx-off-cmap-8 to /tcx-dac " true" encode-string " tcx-8-bit" property else tcx-24bit-reg - /tcx-off-dac-24 to /tcx-dac + /tcx-off-cmap-24 to /tcx-dac
\ Even with a 24-bit enabled TCX card, the control plane is \ used in 8-bit mode. So force the video subsystem into 8-bit
This is a tidied version of the patch originally posted to the mailing list by Olivier DANET odanet@caramail.com.
- Change a few addresses to match actual hardware
- Remove the "address" property from TCX, because of some almost-bug in NetBSD when detecting framebuffers (actual TCX has no address property, so it works by chance on real hardware)
- Add the hardware cursor properties
With this and the corresponding QEMU TCX hardware acceleration patch, the hardware-assisted NetBSD TCX driver will function under QEMU.
Signed-off-by: Mark Cave-Ayland mark.cave-ayland@ilande.co.uk --- openbios-devel/drivers/tcx.fs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/openbios-devel/drivers/tcx.fs b/openbios-devel/drivers/tcx.fs index d682e35..a377db0 100644 --- a/openbios-devel/drivers/tcx.fs +++ b/openbios-devel/drivers/tcx.fs @@ -92,7 +92,7 @@ h# 300000 constant tcx-off-thc-8 h# 1000 constant /tcx-off-thc-24 h# 81c constant /tcx-off-thc-8
-h# 700000 constant tcx-off-tec +h# 701000 constant tcx-off-tec h# 1000 constant /tcx-off-tec
h# 800000 constant tcx-off-dfb8 @@ -103,7 +103,7 @@ h# 400000 constant /tcx-off-dfb24-24 h# 1 constant /tcx-off-dfb24-8
h# 4000000 constant tcx-off-stip -h# 400000 constant /tcx-off-stip-24 +h# 800000 constant /tcx-off-stip-24 h# 1 constant /tcx-off-stip-8
h# 6000000 constant tcx-off-blit @@ -228,7 +228,11 @@ headerless fb-addr to frame-buffer-adr default-font set-font
- frame-buffer-adr encode-int " address" property + \ Sun TCX adapters don't have an address property, but it is useful for + \ OpenBIOS developers. Unfortunately NetBSD SPARC32 has a bug that causes + \ it to fail initialising TCX if the address property is present; so work + \ around this by adding an underscore prefix + frame-buffer-adr encode-int " _address" property
openbios-video-width openbios-video-height over char-width / over char-height / fb8-install @@ -266,7 +270,7 @@ headerless openbios-video-width encode-int " width" property line-bytes encode-int " linebytes" property
- 5 encode-int 0 encode-int encode+ " intr" property + h# 39 encode-int 0 encode-int encode+ " intr" property 5 encode-int " interrupts" property
['] qemu-tcx-driver-install is-install