⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 devices.fs

📁 open source bios with linux platform, very good and can be reused.
💻 FS
字号:
\ tag: device tree administration\ \ this code implements IEEE 1275-1994 \ \ Copyright (C) 2003 Samuel Rydh\ Copyright (C) 2003-2006 Stefan Reinauer\ \ See the file "COPYING" for further information about\ the copyright and warranty status of this work.\ \ 7.4.11.1 Device alias: devalias    ( "{alias-name}< >{device-specifier}<cr>" -- )  ;  : nvalias    ( "alias-name< >device-specifier<cr>" -- )  ;  : $nvalias    ( name-str name-len dev-str dev-len -- )  ;: nvunalias    ( "alias-name< >" -- )  ;  : $nvunalias    ( name-str name-len -- )  ;\ 7.4.11.2 Device tree browsing: dev    ( "<spaces>device-specifier" -- )  bl parse  find-device;: cd  dev;  \ find-device    ( dev-str dev-len -- )\ implemented in pathres.fs: device-end    ( -- )  0 active-package!  ;  : ?active-package ( -- phandle )  active-package dup 0= abort" no active device";\ -------------------------------------------------------\  path handling\ -------------------------------------------------------\ used if parent lacks an encode-unit method: def-encode-unit ( unitaddr ... )    pocket tohexstr;: get-encode-unit-xt ( phandle.parent -- xt )  >dn.parent @  " encode-unit" rot find-method  0= if ['] def-encode-unit then;: get-nodename ( phandle -- str len )  " name" rot get-package-property if " <noname>" else 1- then  ;\ helper, return the node name in the format 'cpus@addr': pnodename ( phandle -- str len )  dup get-nodename rot  dup " reg" rot get-package-property if drop exit then rot  \ set active-package and clear my-self (decode-phys needs this)  my-self >r 0 to my-self  active-package >r  dup active-package!  ( name len prop len phandle )  get-encode-unit-xt  ( name len prop len xt )  depth >r >r  decode-phys r> execute  r> -rot >r >r depth! 3drop  ( name len R: len str )  r> r> " @"  here 20 +              \ abuse dictionary for temporary storage  tmpstrcat >r  2swap r> tmpstrcat drop  pocket tmpstrcpy drop    r> active-package!  r> to my-self;: inodename ( ihandle -- str len )  my-self over to my-self >r  ihandle>phandle get-nodename    \ nonzero unit number?  false >r  depth >r my-unit r> 1+  begin depth over > while    swap 0<> if r> drop true >r then  repeat  drop  \ if not... check for presence of "reg" property  r> ?dup 0= if    " reg" my-self ihandle>phandle get-package-property    if false else 2drop true then  then    ( name len print-unit-flag )  if    my-self ihandle>phandle get-encode-unit-xt    ( name len xt )    depth >r >r    my-unit r> execute    r> -rot >r >r depth! drop    r> r>    ( name len str len )    here 20 + tmpstrcpy     " @" rot tmpstrcat drop    2swap pocket tmpstrcat drop  then  \ add :arguments  my-args dup if    " :" pocket tmpstrcat drop    2swap pocket tmpstrcat drop  else    2drop  then    r> to my-self;\ helper, also used by client interface (package-to-path): get-package-path ( phandle -- str len )  ?dup 0= if 0 0 then  dup >dn.parent @ 0= if drop " /" exit then  \ dictionary abused for temporary storage  >r 0 0 here 40 +   begin r> dup >dn.parent @ dup >r while    ( path len tempbuf phandle R: phandle.parent )    pnodename rot tmpstrcat    " /" rot tmpstrcat  repeat  r> 3drop  pocket tmpstrcpy drop;\ used by client interface (instance-to-path): get-instance-path ( ihandle -- str len )  ?dup 0= if 0 0 then  dup ihandle>phandle >dn.parent @ 0= if drop " /" exit then      \ dictionary abused for temporary storage  >r 0 0 here 40 +   begin r> dup >in.my-parent @ dup >r while    ( path len tempbuf ihandle R: ihandle.parent )    dup >in.interposed @ 0= if      inodename rot tmpstrcat      " /" rot tmpstrcat    else      drop    then  repeat  r> 3drop  pocket tmpstrcpy drop;\ used by client interface (instance-to-interposed-path): get-instance-interposed-path ( ihandle -- str len )  ?dup 0= if 0 0 then  dup ihandle>phandle >dn.parent @ 0= if drop " /" exit then      \ dictionary abused for temporary storage  >r 0 0 here 40 +   begin r> dup >in.my-parent @ dup >r while    ( path len tempbuf ihandle R: ihandle.parent )    dup >r inodename rot tmpstrcat    r> >in.interposed @ if " /%" else " /" then    rot tmpstrcat  repeat  r> 3drop  pocket tmpstrcpy drop;: pwd    ( -- )  ?active-package get-package-path type;  : ls    ( -- )  cr  ?active-package >dn.child @  begin dup while    dup u. dup pnodename type cr    >dn.peer @  repeat  drop;  \ -------------------------------------------\  property printing\ -------------------------------------------: .p-string? ( data len -- true | data len false )  \ no trailing zero?  2dup + 1- c@ if 0 exit then  swap >r 0   \ count zeros and detect unprintable characters?  over 1- begin 1- dup 0>= while    dup r@ + c@    ( len zerocnt n ch )    ?dup 0= if      swap 1+ swap    else      dup 1b <= swap 80 >= or      if 2drop r> swap 0 exit then    then  repeat drop r> -rot  ( data len zerocnt )    \ simple string  0= if    ascii " emit 1- type ascii " emit true exit  then  \ make sure there are no double zeros (except possibly at the end)  2dup over + swap  ( data len end ptr )  begin 2dup <> while    dup c@ 0= if      2dup 1+ <> if 2drop false exit then    then    dup cstrlen 1+ +  repeat  2drop    ." {"  0 -rot over + swap  \ multistring ( cnt end ptr )  begin 2dup <> while    rot dup if ." , " then 1+ -rot    dup cstrlen 2dup    ascii " emit type ascii " emit    1+ +  repeat  ." }"  3drop true;: .p-int? ( data len -- 1 | data len 0 )  dup 4 <> if false exit then  decode-int -rot 2drop true swap  dup 0>= if . exit then  dup -ff < if u. exit then  .;: .p-bytes? ( data len -- 1 | data len 0 )  ." -- " dup . ." : "  swap >r 0  begin 2dup > while    dup r@ + c@    ( len n ch )    pocket tohexstr type ."  "    1+  repeat   2drop r> drop 1;\ this function tries to heuristically determine the data format: (.property) ( data len -- )  dup 0= if 2drop ." <empty>" exit then  .p-string? if exit then  .p-int? if exit then  .p-bytes? if exit then  2drop ." <unimplemented type>";: .properties    ( -- )  ?active-package dup >r if    0 0    begin      r@ next-property    while      cr 2dup dup -rot type      begin ."  " 1+ dup d# 26 >= until drop      2dup active-package get-package-property drop (.property)    repeat  then  r> drop  cr;\ 7.4.11    Device tree: print-dev ( phandle -- phandle )  dup u.   dup get-package-path type  dup " device_type" rot get-package-property if    cr   else    ."  (" decode-string type ." )" cr 2drop  then  ;: show-sub-devs ( subtree-phandle -- )  print-dev  >dn.child @    begin dup while      dup recurse      >dn.peer @    repeat    drop  ;: show-all-devs    ( -- )  active-package  cr " /" find-device  ?active-package show-sub-devs  active-package!  ;: show-devs    ( "{device-specifier}<cr>" -- )  active-package  cr " /" find-device  linefeed parse find-device  ?active-package show-sub-devs  active-package!  ;\ 7.4.11.3 Device probing: probe-all    ( -- )  ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -