Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / board-qemu / slof / pci-device_1013_00b8.fs
diff --git a/qemu/roms/SLOF/board-qemu/slof/pci-device_1013_00b8.fs b/qemu/roms/SLOF/board-qemu/slof/pci-device_1013_00b8.fs
new file mode 100644 (file)
index 0000000..c3ac2ec
--- /dev/null
@@ -0,0 +1,265 @@
+\ *****************************************************************************
+\ * Copyright (c) 2011 IBM Corporation
+\ * All rights reserved.
+\ * This program and the accompanying materials
+\ * are made available under the terms of the BSD License
+\ * which accompanies this distribution, and is available at
+\ * http://www.opensource.org/licenses/bsd-license.php
+\ *
+\ * Contributors:
+\ *     IBM Corporation - initial implementation
+\ ****************************************************************************/
+
+my-space pci-device-generic-setup
+
+\ Defaults, overriden from qemu
+d# 800 VALUE disp-width
+d# 600 VALUE disp-height
+d#   8 VALUE disp-depth
+
+\ Determine base address
+10 config-l@ translate-my-address f not AND  VALUE fb-base
+
+\ Fixed up later
+-1 VALUE io-base
+
+\ We support only one instance
+false VALUE is-installed?
+
+: vga-io-xlate ( port -- addr )
+  io-base -1 = IF
+    dup translate-my-address fff not and to io-base
+  THEN
+  io-base +
+;
+
+: vga-w! ( value port -- )
+  vga-io-xlate rw!-le
+;
+
+: vga-w@ ( port -- value )
+  vga-io-xlate rw@-le
+;
+
+: vga-b! ( value port -- )
+  vga-io-xlate rb!
+;
+
+: vga-b@ ( port -- value )
+  vga-io-xlate rb@
+;
+
+: vga-crt@ ( index -- value )
+  3d4 vga-b!
+  3d5 vga-b@
+;
+
+: vga-crt! ( value index -- )
+  3d4 vga-b!
+  3d5 vga-b!
+;
+
+: vga-seq@ ( index -- value )
+  3c4 vga-b!
+  3c5 vga-b@
+;
+
+: vga-seq! ( value index -- )
+  3c4 vga-b!
+  3c5 vga-b!
+;
+
+: vga-att@ ( index -- value )
+  3c0 vga-b!
+  3c1 vga-b@
+;
+
+: vga-att! ( value index -- )
+  3c0 vga-b!
+  3c0 vga-b!
+;
+
+: vga-gfx@ ( index -- value )
+  3ce vga-b!
+  3cf vga-b@
+;
+
+: vga-gfx! ( value index -- )
+  3ce vga-b!
+  3cf vga-b!
+;
+
+: color! ( r g b number -- ) 
+   3c8 vga-b!
+   rot 2 >> 3c9 vga-b!
+   swap 2 >> 3c9 vga-b!
+   2 >> 3c9 vga-b!
+;
+
+: color@ ( number -- r g b ) 
+   3c8 vga-b!
+   3c9 vga-b@ 2 <<
+   3c9 vga-b@ 2 <<
+   3c9 vga-b@ 2 <<
+;
+
+: set-colors ( adr number #numbers -- )
+   over 3c8 vga-b!
+   swap DO
+     rb@ 2 >> 3c9 vga-b!
+     rb@ 2 >> 3c9 vga-b!
+     rb@ 2 >> 3c9 vga-b!
+   LOOP
+   3drop
+;
+
+: get-colors ( adr number #numbers -- )
+   3drop
+;
+
+include graphics.fs
+
+: init-mode
+  3da vga-b@ drop \ reset flip flop
+  0f 3c2 vga-b!   \ color mode, ram enable, ...
+  12 06 vga-seq!  \ unlock extensions
+  05 06 vga-gfx!  \ graphic mode  
+  \ set bit depth. Note: we should set the hidden
+  \ dac register to differenciate 15 and 16bpp, but
+  \ it's annoying and in practice we don't care as
+  \ we are only displaying in black & white atm
+  disp-depth CASE \ set depth
+     8 OF 01 07 vga-seq! ENDOF
+     f OF 07 07 vga-seq! ENDOF
+    10 OF 07 07 vga-seq! ENDOF
+    20 OF 09 07 vga-seq! ENDOF
+  ENDCASE
+  ff 02 vga-seq!  \ enable plane write
+  0a 04 vga-seq!  \ memory mode
+  03 17 vga-crt!  \ disable display
+  \ calculate line offset & split
+  disp-width disp-depth 7 + 8 / * 3 >>
+  dup ff and 13 vga-crt!  \ bottom bits
+  4 >> 10 and 1b vga-crt! \ top bit
+  disp-width 3 >> 1 -                  01 vga-crt! \ H_DISP
+  disp-height 1 - ff and               12 vga-crt! \ V_DISP
+  disp-height 1 - 7 >> 2 and
+  disp-height 1 - 3 >> 40 and
+  or 10 or                             07 vga-crt! \ OFLOW
+  ff 18 vga-crt! \ LINE_COMPARE
+  40 09 vga-crt! \ MAX_SCAN
+  08 04 vga-crt! \ SYNC_START
+  0f 02 vga-crt! \ BLANK_START
+  00 0c vga-crt!
+  00 0d vga-crt!
+  40 05 vga-gfx! \ gfx mode
+  83 17 vga-crt! \ enable display
+  33 3c0 vga-b!  \ gfx in ar index
+  00 3c0 vga-b!
+  01 01 vga-seq! \ enable seq
+;
+
+: clear-screen
+  fb-base disp-width disp-height disp-depth 7 + 8 / * * 0 rfill
+;
+
+: read-settings
+  s" qemu,graphic-width" get-chosen IF
+     decode-int to disp-width 2drop
+  THEN
+  s" qemu,graphic-height" get-chosen IF
+     decode-int to disp-height 2drop
+  THEN
+  s" qemu,graphic-depth" get-chosen IF
+     decode-int nip nip     
+       dup 8 =
+       over f = or
+       over 10 = or
+       over 20 = or IF
+         to disp-depth
+       ELSE
+         ." Unsupported bit depth, using 8bpp " drop cr
+       THEN
+  THEN
+;
+
+: add-legacy-reg
+  \ add legacy I/O Ports / Memory regions to assigned-addresses
+  \ see PCI Bus Binding Revision 2.1 Section 7.
+  s" reg" get-node get-property IF
+    \ "reg" does not exist, create new
+    encode-start
+  ELSE
+    \ "reg" does exist, copy it 
+    encode-bytes
+  THEN
+  \ I/O Range 0x1ce-0x1d2
+  my-space a1000000 or encode-int+ \ non-relocatable, aliased I/O space
+  1ce encode-64+ 4 encode-64+ \ addr size
+  \ I/O Range 0x3B0-0x3BB
+  my-space a1000000 or encode-int+ \ non-relocatable, aliased I/O space
+  3b0 encode-64+ c encode-64+ \ addr size
+  \ I/O Range 0x3C0-0x3DF
+  my-space a1000000 or encode-int+ \ non-relocatable, aliased I/O space
+  3c0 encode-64+ 20 encode-64+ \ addr size
+  \ Memory Range 0xA0000-0xBFFFF
+  my-space a2000000 or encode-int+ \ non-relocatable, <1MB Memory space
+  a0000 encode-64+ 20000 encode-64+ \ addr size
+  s" reg" property \ store "reg" property
+;
+
+: setup-properties
+   \ Shouldn't this be done from open ?
+   disp-width encode-int s" width" property
+   disp-height encode-int s" height" property
+   disp-width disp-depth 7 + 8 / * encode-int s" linebytes" property
+   disp-depth encode-int s" depth" property
+   s" ISO8859-1" encode-string s" character-set" property \ i hope this is ok...
+   \ add "device_type" property
+   s" display" device-type
+   \ XXX We don't create an "address" property because Linux doesn't know what
+   \ to do with it for >32-bit
+;
+
+\ words for installation/removal, needed by is-install/is-remove, see display.fs
+: display-remove ( -- ) 
+;
+
+: display-install ( -- )
+    is-installed? NOT IF
+        ." Installing QEMU fb" cr
+        fb-base to frame-buffer-adr
+        default-font 
+        set-font
+        disp-width disp-height
+        disp-width char-width / disp-height char-height /
+        disp-depth 7 + 8 /                      ( width height #lines #cols depth )
+        fb-install
+        true to is-installed?
+    THEN
+;
+
+: set-alias
+    s" screen" find-alias 0= IF
+      \ no previous screen alias defined, define it...
+      s" screen" get-node node>path set-alias
+    ELSE
+       drop
+    THEN 
+;
+
+
+." cirrus vga" cr
+
+pci-master-enable
+pci-mem-enable
+pci-io-enable
+add-legacy-reg
+read-settings
+init-mode
+clear-screen
+init-default-palette
+setup-properties
+' display-install is-install
+' display-remove is-remove
+set-alias