1\ ***************************************************************************** 2\ * Copyright (c) 2016 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 13s" serial" device-type 14 15FALSE VALUE initialized? 16 17virtio-setup-vd VALUE virtiodev 18 19\ Quiescence the virtqueue of this device so that no more background 20\ transactions can be pending. 21: shutdown ( -- ) 22 initialized? IF 23 my-phandle node>path open-dev ?dup IF 24 virtiodev virtio-serial-shutdown 25 close-dev 26 THEN 27 FALSE to initialized? 28 THEN 29; 30 31: virtio-serial-term-emit 32 virtiodev SWAP virtio-serial-putchar 33; 34 35: virtio-serial-term-key? virtiodev virtio-serial-haschar ; 36: virtio-serial-term-key BEGIN virtio-serial-term-key? UNTIL virtiodev virtio-serial-getchar ; 37 38\ Basic device initialization - which has only to be done once 39: init ( -- ) 40virtiodev virtio-serial-init drop 41 TRUE to initialized? 42 ['] virtio-serial-term-emit to emit 43 ['] virtio-serial-term-key to key 44 ['] virtio-serial-term-key? to key? 45 ['] shutdown add-quiesce-xt 46; 47 480 VALUE open-count 49 50\ Standard node "open" function 51: open ( -- okay? ) 52 open-count 0= IF 53 open IF initialized? 0= IF init THEN 54 true 55 ELSE false exit 56 THEN 57 ELSE true THEN 58 open-count 1 + to open-count 59; 60 61: close 62 open-count 0> IF 63 open-count 1 - dup to open-count 64 0= IF close THEN 65 THEN 66 close 67; 68 69: write ( addr len -- actual ) 70 tuck 71 0 ?DO 72 dup c@ virtiodev SWAP virtio-serial-putchar 73 1 + 74 LOOP 75 drop 76; 77 78: read ( addr len -- actual ) 79 0= IF drop 0 EXIT THEN 80 virtiodev virtio-serial-haschar 0= IF 0 swap c! -2 EXIT THEN 81 virtiodev virtio-serial-getchar swap c! 1 82; 83 84: setup-alias 85 " vsterm" find-alias 0= IF 86 " vsterm" get-node node>path set-alias 87 ELSE drop THEN 88; 89setup-alias 90 91\ Override serial methods to make term-io.fs happy 92: serial-emit virtio-serial-term-emit ; 93: serial-key? virtio-serial-term-key? ; 94: serial-key virtio-serial-term-key ; 95