/*
 * Copyright (c) 2016 Google Inc.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <vmm/virtio.h>
#include <vmm/virtio_ids.h>
#include <vmm/virtio_config.h>

// Returns NULL if the features are valid, otherwise returns
// an error string describing what part of validation failed
// We pass the vqdev instead of just the dev_id in case we
// also want to validate the device-specific config space.
// feat is the feature vector that you want to validate for the vqdev
const char *virtio_validate_feat(struct virtio_vq_dev *vqdev, uint64_t feat)
{

	// First validate device-specific features. We want to tell someone
	// when they forgot to implement validation code for a new device
	// as soon as possible, so that they don't skip this when they
	// implement new devices.
	switch (vqdev->dev_id) {
		case VIRTIO_ID_CONSOLE:
			// No interdependent features for the console.
			break;
		case VIRTIO_ID_NET:
			// There is no "mandatory" feature bit that we always want to have,
			// either the device can set its own MAC Address (as it does now)
			// or the driver can set it using a controller thread.
			break;
		case 0:
			return "Invalid device id (0x0)! On the MMIO transport, this value indicates that the device is a system memory map with placeholder devices at static, well known addresses. In any case, this is not something you validate features for.";
		default:
			return "Validation not implemented for this device type! You MUST implement validation for this device! You should add your new code to the virtio_validate_feat function in vmm/virtio.c.";
	}

	// Validate common features
	if (!(feat & ((uint64_t)1 << VIRTIO_F_VERSION_1)))
		return "A device MUST offer the VIRTIO_F_VERSION_1 feature bit and a driver MUST accept it.\n"
		       "  See virtio-v1.0-cs04 s6.1 & s6.2.";

	return NULL;
}
