|
@@ -267,6 +267,27 @@ static int int13_get_parameters ( struct int13_drive *drive,
|
267
|
267
|
return 0;
|
268
|
268
|
}
|
269
|
269
|
|
|
270
|
+/**
|
|
271
|
+ * INT 13, 41 - Extensions installation check
|
|
272
|
+ *
|
|
273
|
+ * @v drive Emulated drive
|
|
274
|
+ * @v bx 0x55aa
|
|
275
|
+ * @ret bx 0xaa55
|
|
276
|
+ * @ret cx Extensions API support bitmap
|
|
277
|
+ * @ret status Status code
|
|
278
|
+ */
|
|
279
|
+static int int13_extension_check ( struct int13_drive *drive __unused,
|
|
280
|
+ struct i386_all_regs *ix86 ) {
|
|
281
|
+ if ( ix86->regs.bx == 0x55aa ) {
|
|
282
|
+ DBG ( "INT 13 extensions installation check\n" );
|
|
283
|
+ ix86->regs.bx = 0xaa55;
|
|
284
|
+ ix86->regs.cx = INT13_EXTENSION_LINEAR;
|
|
285
|
+ return 0;
|
|
286
|
+ } else {
|
|
287
|
+ return INT13_STATUS_INVALID;
|
|
288
|
+ }
|
|
289
|
+}
|
|
290
|
+
|
270
|
291
|
/**
|
271
|
292
|
* INT 13, 42 - Extended read
|
272
|
293
|
*
|
|
@@ -357,6 +378,9 @@ static void int13 ( struct i386_all_regs *ix86 ) {
|
357
|
378
|
case INT13_GET_PARAMETERS:
|
358
|
379
|
status = int13_get_parameters ( drive, ix86 );
|
359
|
380
|
break;
|
|
381
|
+ case INT13_EXTENSION_CHECK:
|
|
382
|
+ status = int13_extension_check ( drive, ix86 );
|
|
383
|
+ break;
|
360
|
384
|
case INT13_EXTENDED_READ:
|
361
|
385
|
status = int13_extended_read ( drive, ix86 );
|
362
|
386
|
break;
|