summaryrefslogtreecommitdiffstats
path: root/qemu/roms/openbios/arch/ppc/mol/mol.fs
blob: 10c99bd79d66807579a676950247ec575d756b3f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
\ -------------------------------------------------------------------------
\ initialization
\ -------------------------------------------------------------------------

: make-openable ( path )
  find-dev if
    begin ?dup while
      \ install trivial open and close methods
      dup active-package! is-open
      parent
    repeat
  then
;

: preopen ( chosen-str node-path )
  2dup make-openable
  
  " /chosen" find-device
  open-dev ?dup if
    encode-int 2swap property
  else
    2drop
  then
;

\ preopen device nodes (and store the ihandles under /chosen)
:noname
  " memory" " /memory" preopen
  " mmu" " /cpus/@0" preopen
  " stdout" " /packages/mol-stdout" preopen
  " stdin" " keyboard" preopen
  " nvram" " /pci/pci-bridge/mac-io/nvram" preopen
  " nvram" " /mol/nvram" preopen

; SYSTEM-initializer


\ -------------------------------------------------------------------------
\ device tree fixing
\ -------------------------------------------------------------------------

\ add decode-address methods
: (make-decodable) ( phandle -- )

    dup " #address-cells" rot get-package-property 0= if
      decode-int nip nip
      over " decode-unit" rot find-method if 2drop else
        ( save phandle ncells )
      
        over active-package!
        case
          1 of ['] parse-hex " decode-unit" is-xt-func endof
          3 of
            " bus-range" active-package get-package-property 0= if
              decode-int nip nip
              ['] encode-unit-pci " encode-unit" is-xt-func
              " decode-unit" is-func-begin
                ['] (lit) , ,
                ['] decode-unit-pci-bus ,
              is-func-end
            then
          endof
        endcase
      then
    then
    drop
;
    
: tree-fixes ( -- )
  active-package
  
  iterate-tree-begin
  begin ?dup while

    dup (make-decodable)
    
    iterate-tree
  repeat

  active-package!
;

\ use the tty interface if available
: activate-tty-interface
  " /mol/mol-tty" find-dev if drop
    " /mol/mol-tty" " input-device" $setenv
    " /mol/mol-tty" " output-device" $setenv
  then
;

:noname
  " keyboard" input
; CONSOLE-IN-initializer


\ -------------------------------------------------------------------------
\ pre-booting
\ -------------------------------------------------------------------------

: update-chosen
  " /chosen" find-device
  stdin @ encode-int " stdin" property
  stdout @ encode-int " stdout" property
  device-end
;