Annotation of qemu/roms/SLOF/board-qemu/slof/pci-device_1013_00b8.fs, revision 1.1.1.1

1.1       root        1: \ *****************************************************************************
                      2: \ * Copyright (c) 2011 IBM Corporation
                      3: \ * All rights reserved.
                      4: \ * This program and the accompanying materials
                      5: \ * are made available under the terms of the BSD License
                      6: \ * which accompanies this distribution, and is available at
                      7: \ * http://www.opensource.org/licenses/bsd-license.php
                      8: \ *
                      9: \ * Contributors:
                     10: \ *     IBM Corporation - initial implementation
                     11: \ ****************************************************************************/
                     12: 
                     13: my-space pci-device-generic-setup
                     14: 
                     15: \ Defaults, overriden from qemu
                     16: d# 800 VALUE disp-width
                     17: d# 600 VALUE disp-height
                     18: d#   8 VALUE disp-depth
                     19: 
                     20: \ Determine base address
                     21: 10 config-l@ translate-my-address 3 not AND  VALUE fb-base
                     22: 
                     23: \ Fixed up later
                     24: -1 VALUE io-base
                     25: 
                     26: \ We support only one instance
                     27: false VALUE is-installed?
                     28: 
                     29: : vga-io-xlate ( port -- addr )
                     30:   io-base -1 = IF
                     31:     dup translate-my-address fff not and to io-base
                     32:   THEN
                     33:   io-base +
                     34: ;
                     35: 
                     36: : vga-w! ( value port -- )
                     37:   vga-io-xlate rw!-le
                     38: ;
                     39: 
                     40: : vga-w@ ( port -- value )
                     41:   vga-io-xlate rw@-le
                     42: ;
                     43: 
                     44: : vga-b! ( value port -- )
                     45:   vga-io-xlate rb!
                     46: ;
                     47: 
                     48: : vga-b@ ( port -- value )
                     49:   vga-io-xlate rb@
                     50: ;
                     51: 
                     52: : vga-crt@ ( index -- value )
                     53:   3d4 vga-b!
                     54:   3d5 vga-b@
                     55: ;
                     56: 
                     57: : vga-crt! ( value index -- )
                     58:   3d4 vga-b!
                     59:   3d5 vga-b!
                     60: ;
                     61: 
                     62: : vga-seq@ ( index -- value )
                     63:   3c4 vga-b!
                     64:   3c5 vga-b@
                     65: ;
                     66: 
                     67: : vga-seq! ( value index -- )
                     68:   3c4 vga-b!
                     69:   3c5 vga-b!
                     70: ;
                     71: 
                     72: : vga-att@ ( index -- value )
                     73:   3c0 vga-b!
                     74:   3c1 vga-b@
                     75: ;
                     76: 
                     77: : vga-att! ( value index -- )
                     78:   3c0 vga-b!
                     79:   3c0 vga-b!
                     80: ;
                     81: 
                     82: : vga-gfx@ ( index -- value )
                     83:   3ce vga-b!
                     84:   3cf vga-b@
                     85: ;
                     86: 
                     87: : vga-gfx! ( value index -- )
                     88:   3ce vga-b!
                     89:   3cf vga-b!
                     90: ;
                     91: 
                     92: \ **************************************************************************
                     93: \ ** These come from vga-display.fs and should probably be moved to a common
                     94: \ ** location.
                     95: 
                     96: : draw-rectangle ( adr x y w h -- )
                     97:    is-installed? IF
                     98:       0 ?DO
                     99:          4dup ( adr x y w adr x y w )
                    100:          drop ( adr x y w adr x y )
                    101:          i + screen-width * + \ calculate offset into framebuffer ((y + i) * screen_width + x) 
                    102:          ( adr x y w adr offs ) 
                    103:          frame-buffer-adr + \ add to frame-buffer-adr ( adr x y w adr fb_adr ) 
                    104:          1 pick 3 pick i * + swap 3 pick ( adr x y w adr adr_offs fb_adr w )
                    105:          rmove \ copy line ( adr x y w adr )
                    106:          drop ( adr x y w )
                    107:       LOOP
                    108:       4drop
                    109:    ELSE
                    110:       4drop drop
                    111:    THEN
                    112: ;
                    113: 
                    114: : fill-rectangle ( number x y w h -- )
                    115:    is-installed? IF
                    116:       0 ?DO
                    117:          4dup ( number x y w number x y w )
                    118:          drop ( number x y w number x y )
                    119:          i + screen-width * + \ calculate offset into framebuffer ((y + i) * screen_width + x) 
                    120:          ( number x y w number offs ) 
                    121:          frame-buffer-adr + \ add to frame-buffer-adr ( number x y w number adr ) 
                    122:          2 pick 2 pick ( number x y w number adr w number )
                    123:          rfill \ draw line ( number x y w number )
                    124:          drop ( number x y w )
                    125:       LOOP
                    126:       4drop
                    127:    ELSE
                    128:       4drop drop
                    129:    THEN
                    130: ;
                    131: 
                    132: : read-rectangle ( adr x y w h -- )
                    133:    is-installed? IF
                    134:       0 ?DO
                    135:          4dup ( adr x y w adr x y w )
                    136:          drop ( adr x y w adr x y )
                    137:          i + screen-width * + \ calculate offset into framebuffer ((y + i) * screen_width + x) 
                    138:          ( adr x y w adr offs ) 
                    139:          frame-buffer-adr + \ add to frame-buffer-adr ( adr x y w adr fb_adr ) 
                    140:          1 pick 3 pick i * + 3 pick ( adr x y w adr fb_adr adr_offs w )
                    141:          rmove \ copy line ( adr x y w adr )
                    142:          drop ( adr x y w )
                    143:       LOOP
                    144:       4drop
                    145:    ELSE
                    146:       4drop drop
                    147:    THEN
                    148: ;
                    149: 
                    150: \ ** end of copy from vga-display.fs
                    151: \ **************************************************************************
                    152: 
                    153: : color! ( r g b number -- ) 
                    154:    3c8 vga-b!
                    155:    rot 2 >> 3c9 vga-b!
                    156:    swap 2 >> 3c9 vga-b!
                    157:    2 >> 3c9 vga-b!
                    158: ;
                    159: 
                    160: : color@ ( number -- r g b ) 
                    161:    3c8 vga-b!
                    162:    3c9 vga-b@ 2 <<
                    163:    3c9 vga-b@ 2 <<
                    164:    3c9 vga-b@ 2 <<
                    165: ;
                    166: 
                    167: : set-colors ( adr number #numbers -- )
                    168:    over 3c8 vga-b!
                    169:    swap DO
                    170:      rb@ 2 >> 3c9 vga-b!
                    171:      rb@ 2 >> 3c9 vga-b!
                    172:      rb@ 2 >> 3c9 vga-b!
                    173:    LOOP
                    174:    3drop
                    175: ;
                    176: 
                    177: : get-colors ( adr number #numbers -- )
                    178:    3drop
                    179: ;
                    180: 
                    181: : default-palette
                    182:   \ Grayscale ramp for now, be smarter later
                    183:   100 0 DO
                    184:     i i i i color!
                    185:   LOOP
                    186: ;
                    187: 
                    188: 
                    189: : init-mode
                    190:   3da vga-b@ drop \ reset flip flop
                    191:   0f 3c2 vga-b!   \ color mode, ram enable, ...
                    192:   12 06 vga-seq!  \ unlock extensions
                    193:   05 06 vga-gfx!  \ graphic mode  
                    194:   \ set bit depth. Note: we should set the hidden
                    195:   \ dac register to differenciate 15 and 16bpp, but
                    196:   \ it's annoying and in practice we don't care as
                    197:   \ we are only displaying in black & white atm
                    198:   disp-depth CASE \ set depth
                    199:      8 OF 01 07 vga-seq! ENDOF
                    200:      f OF 07 07 vga-seq! ENDOF
                    201:     10 OF 07 07 vga-seq! ENDOF
                    202:     20 OF 09 07 vga-seq! ENDOF
                    203:   ENDCASE
                    204:   ff 02 vga-seq!  \ enable plane write
                    205:   0a 04 vga-seq!  \ memory mode
                    206:   03 17 vga-crt!  \ disable display
                    207:   \ calculate line offset & split
                    208:   disp-width disp-depth 7 + 8 / * 3 >>
                    209:   dup ff and 13 vga-crt!  \ bottom bits
                    210:   4 >> 10 and 1b vga-crt! \ top bit
                    211:   disp-width 3 >> 1 -                  01 vga-crt! \ H_DISP
                    212:   disp-height 1 - ff and               12 vga-crt! \ V_DISP
                    213:   disp-height 1 - 7 >> 2 and
                    214:   disp-height 1 - 3 >> 40 and
                    215:   or 10 or                             07 vga-crt! \ OFLOW
                    216:   ff 18 vga-crt! \ LINE_COMPARE
                    217:   40 09 vga-crt! \ MAX_SCAN
                    218:   08 04 vga-crt! \ SYNC_START
                    219:   0f 02 vga-crt! \ BLANK_START
                    220:   00 0c vga-crt!
                    221:   00 0d vga-crt!
                    222:   40 05 vga-gfx! \ gfx mode
                    223:   83 17 vga-crt! \ enable display
                    224:   33 3c0 vga-b!  \ gfx in ar index
                    225:   00 3c0 vga-b!
                    226:   01 01 vga-seq! \ enable seq
                    227: ;
                    228: 
                    229: : clear-screen
                    230:   fb-base disp-width disp-height disp-depth 7 + 8 / * * 0 rfill
                    231: ;
                    232: 
                    233: : read-settings
                    234:   s" qemu,graphic-width" get-chosen IF
                    235:      decode-int to disp-width 2drop
                    236:   THEN
                    237:   s" qemu,graphic-height" get-chosen IF
                    238:      decode-int to disp-height 2drop
                    239:   THEN
                    240:   s" qemu,graphic-depth" get-chosen IF
                    241:      decode-int nip nip     
                    242:        dup 8 =
                    243:        over f = or
                    244:        over 10 = or
                    245:        over 20 = or IF
                    246:          to disp-depth
                    247:        ELSE
                    248:          ." Unsupported bit depth, using 8bpp " drop cr
                    249:        THEN
                    250:   THEN
                    251: ;
                    252: 
                    253: : add-legacy-reg
                    254:   \ add legacy I/O Ports / Memory regions to assigned-addresses
                    255:   \ see PCI Bus Binding Revision 2.1 Section 7.
                    256:   s" reg" get-node get-property IF
                    257:     \ "reg" does not exist, create new
                    258:     encode-start
                    259:   ELSE
                    260:     \ "reg" does exist, copy it 
                    261:     encode-bytes
                    262:   THEN
                    263:   \ I/O Range 0x1ce-0x1d2
                    264:   my-space a1000000 or encode-int+ \ non-relocatable, aliased I/O space
                    265:   1ce encode-64+ 4 encode-64+ \ addr size
                    266:   \ I/O Range 0x3B0-0x3BB
                    267:   my-space a1000000 or encode-int+ \ non-relocatable, aliased I/O space
                    268:   3b0 encode-64+ c encode-64+ \ addr size
                    269:   \ I/O Range 0x3C0-0x3DF
                    270:   my-space a1000000 or encode-int+ \ non-relocatable, aliased I/O space
                    271:   3c0 encode-64+ 20 encode-64+ \ addr size
                    272:   \ Memory Range 0xA0000-0xBFFFF
                    273:   my-space a2000000 or encode-int+ \ non-relocatable, <1MB Memory space
                    274:   a0000 encode-64+ 20000 encode-64+ \ addr size
                    275:   s" reg" property \ store "reg" property
                    276: ;
                    277: 
                    278: : setup-properties
                    279:    \ Shouldn't this be done from open ?
                    280:    disp-width encode-int s" width" property
                    281:    disp-height encode-int s" height" property
                    282:    disp-width disp-depth 7 + 8 / * encode-int s" linebytes" property
                    283:    disp-depth encode-int s" depth" property
                    284:    s" ISO8859-1" encode-string s" character-set" property \ i hope this is ok...
                    285:    \ add "device_type" property
                    286:    s" display" encode-string s" device_type" property
                    287:    \ XXX We don't create an "address" property because Linux doesn't know what
                    288:    \ to do with it for >32-bit
                    289: ;
                    290: 
                    291: \ words for installation/removal, needed by is-install/is-remove, see display.fs
                    292: : display-remove ( -- ) 
                    293: ;
                    294: 
                    295: : display-install ( -- )
                    296:     is-installed? NOT IF
                    297:         ." Installing QEMU fb" cr
                    298:         fb-base to frame-buffer-adr
                    299:         default-font 
                    300:         set-font
                    301:         disp-width disp-height
                    302:         disp-width char-width / disp-height char-height /
                    303:         disp-depth 7 + 8 /                      ( width height #lines #cols depth )
                    304:         fb-install
                    305:         true to is-installed?
                    306:     THEN
                    307: ;
                    308: 
                    309: : dimensions ( -- width height )
                    310:   disp-width disp-height
                    311: ;
                    312: 
                    313: : set-alias
                    314:     s" screen" find-alias 0= IF
                    315:       \ no previous screen alias defined, define it...
                    316:       s" screen" get-node node>path set-alias
                    317:     ELSE
                    318:        drop
                    319:     THEN 
                    320: ;
                    321: 
                    322: 
                    323: ." cirrus vga" cr
                    324: 
                    325: pci-master-enable
                    326: pci-mem-enable
                    327: pci-io-enable
                    328: add-legacy-reg
                    329: read-settings
                    330: init-mode
                    331: clear-screen
                    332: default-palette
                    333: setup-properties
                    334: ' display-install is-install
                    335: ' display-remove is-remove
                    336: set-alias

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.