/* visorchannel_main.c
 *
 * Copyright (C) 2010 - 2013 UNISYS CORPORATION
 * All rights reserved.
 *
 * 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, GOOD TITLE or
 * NON INFRINGEMENT.  See the GNU General Public License for more
 * details.
 */

/*
 *  This is a module "wrapper" around visorchannel_funcs.
 */

#include "globals.h"
#include "channel.h"
#include "visorchannel.h"
#include <linux/uuid.h>

#define MYDRVNAME "visorchannel"

static int __init
visorchannel_init(void)
{
	if (!unisys_spar_platform)
		return -ENODEV;

	return 0;
}

static void
visorchannel_exit(void)
{
}

module_init(visorchannel_init);
module_exit(visorchannel_exit);

MODULE_AUTHOR("Unisys");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("Supervisor channel driver for service partition: ver "
		   VERSION);
MODULE_VERSION(VERSION);
