2014-12-02 19:01:13 +01:00
|
|
|
"use strict";
|
|
|
|
|
|
|
|
// jor1k compatibility
|
|
|
|
|
|
|
|
var VIRTIO_MAGIC_REG = 0x0;
|
|
|
|
var VIRTIO_VERSION_REG = 0x4;
|
|
|
|
var VIRTIO_DEVICE_REG = 0x8;
|
|
|
|
var VIRTIO_VENDOR_REG = 0xc;
|
|
|
|
var VIRTIO_HOSTFEATURES_REG = 0x10;
|
|
|
|
var VIRTIO_HOSTFEATURESSEL_REG = 0x14;
|
|
|
|
var VIRTIO_GUESTFEATURES_REG = 0x20;
|
|
|
|
var VIRTIO_GUESTFEATURESSEL_REG = 0x24;
|
|
|
|
var VIRTIO_GUEST_PAGE_SIZE_REG = 0x28;
|
|
|
|
var VIRTIO_QUEUESEL_REG = 0x30;
|
|
|
|
var VIRTIO_QUEUENUMMAX_REG = 0x34;
|
|
|
|
var VIRTIO_QUEUENUM_REG = 0x38;
|
|
|
|
var VIRTIO_QUEUEALIGN_REG = 0x3C;
|
|
|
|
var VIRTIO_QUEUEPFN_REG = 0x40;
|
|
|
|
var VIRTIO_QUEUENOTIFY_REG = 0x50;
|
|
|
|
var VIRTIO_INTERRUPTSTATUS_REG = 0x60;
|
|
|
|
var VIRTIO_INTERRUPTACK_REG = 0x64;
|
|
|
|
var VIRTIO_STATUS_REG = 0x70;
|
|
|
|
|
2014-12-13 01:08:49 +01:00
|
|
|
/** @const */
|
2014-12-02 19:01:13 +01:00
|
|
|
var VRING_DESC_F_NEXT = 1; /* This marks a buffer as continuing via the next field. */
|
2014-12-13 01:08:49 +01:00
|
|
|
/** @const */
|
2014-12-02 19:01:13 +01:00
|
|
|
var VRING_DESC_F_WRITE = 2; /* This marks a buffer as write-only (otherwise read-only). */
|
2014-12-13 01:08:49 +01:00
|
|
|
/** @const */
|
2014-12-02 19:01:13 +01:00
|
|
|
var VRING_DESC_F_INDIRECT = 4; /* This means the buffer contains a list of buffer descriptors. */
|
|
|
|
|
|
|
|
|
2014-12-13 01:08:49 +01:00
|
|
|
function hex8(n)
|
2014-12-02 19:01:13 +01:00
|
|
|
{
|
2014-12-13 01:08:49 +01:00
|
|
|
return h(n);
|
2014-12-02 19:01:13 +01:00
|
|
|
}
|
2014-12-13 01:08:49 +01:00
|
|
|
|
2016-01-04 04:16:00 +01:00
|
|
|
var message = {};
|
|
|
|
|
2014-12-13 01:08:49 +01:00
|
|
|
/** @param {...string} log */
|
2016-01-04 04:16:00 +01:00
|
|
|
message.Debug = function(log)
|
2014-12-02 19:01:13 +01:00
|
|
|
{
|
2014-12-21 22:05:23 +01:00
|
|
|
dbg_log([].slice.apply(arguments).join(" "), LOG_9P);
|
2014-12-02 19:01:13 +01:00
|
|
|
}
|
|
|
|
|
2016-01-04 04:16:00 +01:00
|
|
|
message.Abort = function()
|
|
|
|
{
|
|
|
|
if(DEBUG)
|
|
|
|
{
|
|
|
|
throw "abort";
|
|
|
|
}
|
2014-12-02 19:01:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-01-04 04:16:00 +01:00
|
|
|
// XXX: Should go through emulator interface
|
|
|
|
var LoadBinaryResource;
|
|
|
|
|
|
|
|
if(typeof XMLHttpRequest !== "undefined")
|
|
|
|
{
|
|
|
|
LoadBinaryResource = function(url, OnSuccess, OnError) {
|
|
|
|
var req = new XMLHttpRequest();
|
|
|
|
req.open('GET', url, true);
|
|
|
|
req.responseType = "arraybuffer";
|
|
|
|
req.onreadystatechange = function () {
|
|
|
|
if (req.readyState != 4) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if ((req.status != 200) && (req.status != 0)) {
|
|
|
|
OnError("Error: Could not load file " + url);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
var arrayBuffer = req.response;
|
|
|
|
if (arrayBuffer) {
|
|
|
|
OnSuccess(arrayBuffer);
|
|
|
|
} else {
|
|
|
|
OnError("Error: No data received from: " + url);
|
|
|
|
}
|
2014-12-02 19:01:13 +01:00
|
|
|
};
|
2016-01-04 04:16:00 +01:00
|
|
|
/*
|
|
|
|
req.onload = function(e)
|
|
|
|
{
|
|
|
|
var arrayBuffer = req.response;
|
|
|
|
if (arrayBuffer) {
|
|
|
|
OnLoadFunction(arrayBuffer);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
*/
|
|
|
|
req.send(null);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
LoadBinaryResource = function(url, OnSuccess, OnError)
|
|
|
|
{
|
|
|
|
//console.log(url);
|
|
|
|
require("fs")["readFile"](url, function(err, data)
|
|
|
|
{
|
|
|
|
if(err)
|
|
|
|
{
|
|
|
|
OnError(err);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-05-03 19:37:32 +02:00
|
|
|
OnSuccess(data.buffer);
|
2016-01-04 04:16:00 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
2014-12-02 19:01:13 +01:00
|
|
|
}
|