|
|
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: \ ." Populating " pwd cr ! 14: ! 15: s" block" device-type ! 16: ! 17: FALSE VALUE initialized? ! 18: ! 19: \ Required interface for deblocker ! 20: ! 21: 200 CONSTANT block-size ! 22: 8000 CONSTANT max-transfer ! 23: ! 24: INSTANCE VARIABLE deblocker ! 25: ! 26: /vd-len BUFFER: virtiodev ! 27: virtiodev virtio-setup-vd ! 28: ! 29: \ Quiesce the virtqueue of this device so that no more background ! 30: \ transactions can be pending. ! 31: : shutdown ( -- ) ! 32: virtiodev virtio-blk-shutdown ! 33: FALSE to initialized? ! 34: ; ! 35: ! 36: \ Basic device initialization - which has only to be done once ! 37: : init ( -- ) ! 38: virtiodev virtio-blk-init ! 39: TRUE to initialized? ! 40: ['] shutdown add-quiesce-xt ! 41: ; ! 42: ! 43: \ Read multiple blocks - called by deblocker package ! 44: : read-blocks ( addr block# #blocks -- #read ) ! 45: virtiodev virtio-blk-read ! 46: ; ! 47: ! 48: \ Standard node "open" function ! 49: : open ( -- okay? ) ! 50: open 0= IF false EXIT THEN ! 51: 0 0 s" deblocker" $open-package dup deblocker ! dup IF ! 52: s" disk-label" find-package IF ! 53: my-args rot interpose ! 54: THEN ! 55: THEN ! 56: dup initialized? 0= AND IF ! 57: init ! 58: THEN ! 59: 0<> ! 60: ; ! 61: ! 62: \ Standard node "close" function ! 63: : close ( -- ) ! 64: deblocker @ close-package ! 65: close ! 66: ; ! 67: ! 68: \ Standard node "seek" function ! 69: : seek ( pos.lo pos.hi -- status ) ! 70: s" seek" deblocker @ $call-method ! 71: ; ! 72: ! 73: \ Standard node "read" function ! 74: : read ( addr len -- actual ) ! 75: s" read" deblocker @ $call-method ! 76: ; ! 77: ! 78: \ Set disk alias if none is set yet ! 79: : (set-alias) ! 80: s" disk" find-alias 0= IF ! 81: s" disk" get-node node>path set-alias ! 82: ELSE ! 83: drop ! 84: THEN ! 85: ; ! 86: (set-alias)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.