@@ -72,42 +72,46 @@ function initializeBlockDevice(pciDevice) {
7272 return u8 ;
7373 }
7474
75- const diskDriver = new runtime . disk . DiskDriver ( 'blk' ) ;
76- diskDriver . onread = ( sector , data ) => {
77- return new Promise ( ( resolve , reject ) => {
78- if ( sector > totalSectorCount ) {
79- setImmediate ( ( ) => {
80- reject ( new RangeError ( `sector ${ sector } out of bounds (max ${ totalSectorCount } , non-inclusive)` ) ) ;
81- } ) ;
82- return ;
83- }
84- const status = new Uint8Array ( 1 ) ;
85- promiseQueue . push ( [ resolve , reject , VIRTIO_BLK_T_IN , data , status ] ) ;
86- reqQueue . placeBuffers ( [ buildHeader ( VIRTIO_BLK_T_IN , sector ) , data , status ] , [ false , true , true ] ) ;
87-
88- if ( reqQueue . isNotificationNeeded ( ) ) {
89- dev . queueNotify ( QUEUE_ID_REQ ) ;
90- }
91- } ) ;
92- } ;
93- diskDriver . onwrite = ( sector , data ) => {
94- return new Promise ( ( resolve , reject ) => {
95- const status = new Uint8Array ( 1 ) ;
96- promiseQueue . push ( [ resolve , reject , VIRTIO_BLK_T_OUT , data , status ] ) ;
97- reqQueue . placeBuffers ( [ buildHeader ( VIRTIO_BLK_T_OUT , sector ) , data , status ] , [ false , false , true ] ) ;
98-
99- if ( reqQueue . isNotificationNeeded ( ) ) {
100- dev . queueNotify ( QUEUE_ID_REQ ) ;
101- }
102- } ) ;
103- } ;
104- diskDriver . ongetformatinfo = ( ) => ( {
105- sectorSize,
106- sectorCount,
107- totalSectorCount,
75+ const diskDriver = new runtime . disk . DiskInterface ( 'hda' , {
76+ read ( sector , data ) {
77+ return new Promise ( ( resolve , reject ) => {
78+ if ( sector > totalSectorCount ) {
79+ setImmediate ( ( ) => {
80+ reject ( new RangeError ( `sector ${ sector } out of bounds (max ${ totalSectorCount } , non-inclusive)` ) ) ;
81+ } ) ;
82+ return ;
83+ }
84+ const status = new Uint8Array ( 1 ) ;
85+ promiseQueue . push ( [ resolve , reject , VIRTIO_BLK_T_IN , data , status ] ) ;
86+ reqQueue . placeBuffers ( [ buildHeader ( VIRTIO_BLK_T_IN , sector ) , data , status ] , [ false , true , true ] ) ;
87+
88+ if ( reqQueue . isNotificationNeeded ( ) ) {
89+ dev . queueNotify ( QUEUE_ID_REQ ) ;
90+ }
91+ } ) ;
92+ } ,
93+ write ( sector , data ) {
94+ return new Promise ( ( resolve , reject ) => {
95+ const status = new Uint8Array ( 1 ) ;
96+ promiseQueue . push ( [ resolve , reject , VIRTIO_BLK_T_OUT , data , status ] ) ;
97+ reqQueue . placeBuffers ( [ buildHeader ( VIRTIO_BLK_T_OUT , sector ) , data , status ] , [ false , false , true ] ) ;
98+
99+ if ( reqQueue . isNotificationNeeded ( ) ) {
100+ dev . queueNotify ( QUEUE_ID_REQ ) ;
101+ }
102+ } ) ;
103+ } ,
104+ formatInfo : {
105+ sectorSize,
106+ sectorCount,
107+ totalSectorCount,
108+ } ,
109+ isOnline ( ) {
110+ return true ; // TODO: actually check if the disk is online or not
111+ }
108112 } ) ;
109113
110- runtime . disk . addDriver ( diskDriver ) ;
114+ runtime . disk . registerDisk ( diskDriver ) ;
111115
112116 function recvBuffer ( ) {
113117 if ( promiseQueue . length === 0 ) {
0 commit comments