Annotation of qemu/roms/SLOF/board-qemu/slof/pci-device_1013_00b8.fs, revision 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.