/* 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.
 */

/*
 * CHANNEL Guids
 */

/* Used in IOChannel
 * {414815ed-c58c-11da-95a9-00e08161165f}
 */
#define SPAR_VHBA_CHANNEL_PROTOCOL_UUID \
		UUID_LE(0x414815ed, 0xc58c, 0x11da, \
				0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f)
static const uuid_le spar_vhba_channel_protocol_uuid =
	SPAR_VHBA_CHANNEL_PROTOCOL_UUID;

/* Used in IOChannel
 * {8cd5994d-c58e-11da-95a9-00e08161165f}
 */
#define SPAR_VNIC_CHANNEL_PROTOCOL_UUID \
		UUID_LE(0x8cd5994d, 0xc58e, 0x11da, \
				0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f)
static const uuid_le spar_vnic_channel_protocol_uuid =
	SPAR_VNIC_CHANNEL_PROTOCOL_UUID;

/* Used in IOChannel
 * {72120008-4AAB-11DC-8530-444553544200}
 */
#define SPAR_SIOVM_UUID \
		UUID_LE(0x72120008, 0x4AAB, 0x11DC, \
				0x85, 0x30, 0x44, 0x45, 0x53, 0x54, 0x42, 0x00)
static const uuid_le spar_siovm_uuid = SPAR_SIOVM_UUID;


/* Used in visornoop/visornoop_main.c
 * {5b52c5ac-e5f5-4d42-8dff-429eaecd221f}
 */
#define SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID  \
		UUID_LE(0x5b52c5ac, 0xe5f5, 0x4d42, \
				0x8d, 0xff, 0x42, 0x9e, 0xae, 0xcd, 0x22, 0x1f)

static const uuid_le spar_controldirector_channel_protocol_uuid =
	SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID;

/* Used in visorchipset/visorchipset_main.c
 * {B4E79625-AEDE-4EAA-9E11-D3EDDCD4504C}
 */
#define SPAR_DIAG_POOL_CHANNEL_PROTOCOL_UUID				\
		UUID_LE(0xb4e79625, 0xaede, 0x4eaa, \
				0x9e, 0x11, 0xd3, 0xed, 0xdc, 0xd4, 0x50, 0x4c)


