OpenSolaris_b135/lib/udapl/libdat/common/dat_strerror.c

/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 2002-2003, Network Appliance, Inc. All rights reserved.
 */

/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */

/*
 *
 * MODULE: dat_strerror.c
 *
 * PURPOSE: Convert DAT_RETURN values to humman readable string
 *
 * $Id: dat_strerror.c,v 1.2 2003/08/06 14:40:29 jlentini Exp $
 */

#include <dat/udat.h>


/*
 *
 * Internal Function Declarations
 *
 */

DAT_RETURN
dat_strerror_major(
    IN  DAT_RETURN 		value,
    OUT const char 		**message);

DAT_RETURN
dat_strerror_minor(
    IN  DAT_RETURN 		value,
    OUT const char 		**message);


/*
 *
 * Internal Function Definitions
 *
 */

DAT_RETURN
dat_strerror_major(
    IN  DAT_RETURN 		value,
    OUT const char 		**message)
{
	switch (DAT_GET_TYPE(value)) {
	case DAT_SUCCESS:
	{
		*message = "DAT_SUCCESS";
		return (DAT_SUCCESS);
	}
	case DAT_ABORT:
	{
		*message = "DAT_ABORT";
		return (DAT_SUCCESS);
	}
	case DAT_CONN_QUAL_IN_USE:
	{
		*message = "DAT_CONN_QUAL_IN_USE";
		return (DAT_SUCCESS);
	}
	case DAT_INSUFFICIENT_RESOURCES:
	{
		*message = "DAT_INSUFFICIENT_RESOURCES";
		return (DAT_SUCCESS);
	}
	case DAT_INTERNAL_ERROR:
	{
		*message = "DAT_INTERNAL_ERROR";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE:
	{
		*message = "DAT_INVALID_HANDLE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_PARAMETER:
	{
		*message = "DAT_INVALID_PARAMETER";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE:
	{
		*message = "DAT_INVALID_STATE";
		return (DAT_SUCCESS);
	}
	case DAT_LENGTH_ERROR:
	{
		*message = "DAT_LENGTH_ERROR";
		return (DAT_SUCCESS);
	}
	case DAT_MODEL_NOT_SUPPORTED:
	{
		*message = "DAT_MODEL_NOT_SUPPORTED";
		return (DAT_SUCCESS);
	}
	case DAT_NAME_NOT_FOUND:
	{
		*message = "DAT_NAME_NOT_FOUND";
		return (DAT_SUCCESS);
	}
	case DAT_PRIVILEGES_VIOLATION:
	{
		*message = "DAT_PRIVILEGES_VIOLATION";
		return (DAT_SUCCESS);
	}
	case DAT_PROTECTION_VIOLATION:
	{
		*message = "DAT_PROTECTION_VIOLATION";
		return (DAT_SUCCESS);
	}
	case DAT_QUEUE_EMPTY:
	{
		*message = "DAT_QUEUE_EMPTY";
		return (DAT_SUCCESS);
	}
	case DAT_QUEUE_FULL:
	{
		*message = "DAT_QUEUE_FULL";
		return (DAT_SUCCESS);
	}
	case DAT_TIMEOUT_EXPIRED:
	{
		*message = "DAT_TIMEOUT_EXPIRED";
		return (DAT_SUCCESS);
	}
	case DAT_PROVIDER_ALREADY_REGISTERED:
	{
		*message = "DAT_PROVIDER_ALREADY_REGISTERED";
		return (DAT_SUCCESS);
	}
	case DAT_PROVIDER_IN_USE:
	{
		*message = "DAT_PROVIDER_IN_USE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ADDRESS:
	{
		*message = "DAT_INVALID_ADDRESS";
		return (DAT_SUCCESS);
	}
	case DAT_INTERRUPTED_CALL:
	{
		*message = "DAT_INTERRUPTED_CALL";
		return (DAT_SUCCESS);
	}
	case DAT_NOT_IMPLEMENTED:
	{
		*message = "DAT_NOT_IMPLEMENTED";
		return (DAT_SUCCESS);
	}
	default:
	{
		return (DAT_INVALID_PARAMETER);
	}
	}
}


DAT_RETURN
dat_strerror_minor(
    IN  DAT_RETURN 		value,
    OUT const char 		**message)
{
	switch (DAT_GET_SUBTYPE(value)) {
	case DAT_NO_SUBTYPE:
	{
		*message = "";
		return (DAT_SUCCESS);
	}
	case DAT_SUB_INTERRUPTED:
	{
		*message = "DAT_SUB_INTERRUPTED";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_MEMORY:
	{
		*message = "DAT_RESOURCE_MEMORY";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_DEVICE:
	{
		*message = "DAT_RESOURCE_DEVICE";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_TEP:
	{
		*message = "DAT_RESOURCE_TEP";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_TEVD:
	{
		*message = "DAT_RESOURCE_TEVD";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_PROTECTION_DOMAIN:
	{
		*message = "DAT_RESOURCE_PROTECTION_DOMAIN";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_MEMORY_REGION:
	{
		*message = "DAT_RESOURCE_MEMORY_REGION";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_ERROR_HANDLER:
	{
		*message = "DAT_RESOURCE_ERROR_HANDLER";
		return (DAT_SUCCESS);
	}
	case DAT_RESOURCE_CREDITS:
	{
		*message = "DAT_RESOURCE_CREDITS";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_IA:
	{
		*message = "DAT_INVALID_HANDLE_IA";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_EP:
	{
		*message = "DAT_INVALID_HANDLE_EP";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_LMR:
	{
		*message = "DAT_INVALID_HANDLE_LMR";
		return (DAT_SUCCESS);
	}
	case  DAT_INVALID_HANDLE_RMR:
	{
		*message = "DAT_INVALID_HANDLE_RMR";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_PZ:
	{
		*message = "DAT_INVALID_HANDLE_PZ";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_PSP:
	{
		*message = "DAT_INVALID_HANDLE_PSP";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_RSP:
	{
		*message = "DAT_INVALID_HANDLE_RSP";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_CR:
	{
		*message = "DAT_INVALID_HANDLE_CR";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_CNO:
	{
		*message = "DAT_INVALID_HANDLE_CNO";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_EVD_CR:
	{
		*message = "DAT_INVALID_HANDLE_EVD_CR";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_EVD_REQUEST:
	{
		*message = "DAT_INVALID_HANDLE_EVD_REQUEST";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_EVD_RECV:
	{
		*message = "DAT_INVALID_HANDLE_EVD_RECV";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_EVD_CONN:
	{
		*message = "DAT_INVALID_HANDLE_EVD_CONN";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_HANDLE_EVD_ASYNC:
	{
		*message = "DAT_INVALID_HANDLE_EVD_ASYNC";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG1:
	{
		*message = "DAT_INVALID_ARG1";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG2:
	{
		*message = "DAT_INVALID_ARG2";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG3:
	{
		*message = "DAT_INVALID_ARG3";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG4:
	{
		*message = "DAT_INVALID_ARG4";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG5:
	{
		*message = "DAT_INVALID_ARG5";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG6:
	{
		*message = "DAT_INVALID_ARG6";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG7:
	{
		*message = "DAT_INVALID_ARG7";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG8:
	{
		*message = "DAT_INVALID_ARG8";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG9:
	{
		*message = "DAT_INVALID_ARG9";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ARG10:
	{
		*message = "DAT_INVALID_ARG10";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_UNCONNECTED:
	{
		*message = "DAT_INVALID_STATE_EP_UNCONNECTED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_ACTCONNPENDING:
	{
		*message = "DAT_INVALID_STATE_EP_ACTCONNPENDING";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_PASSCONNPENDING:
	{
		*message = "DAT_INVALID_STATE_EP_PASSCONNPENDING";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_TENTCONNPENDING:
	{
		*message = "DAT_INVALID_STATE_EP_TENTCONNPENDING";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_CONNECTED:
	{
		*message = "DAT_INVALID_STATE_EP_CONNECTED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_DISCONNECTED:
	{
		*message = "DAT_INVALID_STATE_EP_DISCONNECTED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_RESERVED:
	{
		*message = "DAT_INVALID_STATE_EP_RESERVED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_COMPLPENDING:
	{
		*message = "DAT_INVALID_STATE_EP_COMPLPENDING";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_DISCPENDING:
	{
		*message = "DAT_INVALID_STATE_EP_DISCPENDING";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_PROVIDERCONTROL:
	{
		*message = "DAT_INVALID_STATE_EP_PROVIDERCONTROL";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EP_NOTREADY:
	{
		*message = "DAT_INVALID_STATE_EP_NOTREADY";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_CNO_IN_USE:
	{
		*message = "DAT_INVALID_STATE_CNO_IN_USE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_CNO_DEAD:
	{
		*message = "DAT_INVALID_STATE_CNO_DEAD";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_OPEN:
	{
		*message = "DAT_INVALID_STATE_EVD_OPEN";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_ENABLED:
	{
		*message = "DAT_INVALID_STATE_EVD_ENABLED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_DISABLED:
	{
		*message = "DAT_INVALID_STATE_EVD_DISABLED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_WAITABLE:
	{
		*message = "DAT_INVALID_STATE_EVD_WAITABLE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_UNWAITABLE:
	{
		*message = "DAT_INVALID_STATE_EVD_UNWAITABLE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_IN_USE:
	{
		*message = "DAT_INVALID_STATE_EVD_IN_USE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_CONFIG_NOTIFY:
	{
		*message = "DAT_INVALID_STATE_EVD_CONFIG_NOTIFY";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_CONFIG_SOLICITED:
	{
		*message = "DAT_INVALID_STATE_EVD_CONFIG_SOLICITED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_CONFIG_THRESHOLD:
	{
		*message = "DAT_INVALID_STATE_EVD_CONFIG_THRESHOLD";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_WAITER:
	{
		*message = "DAT_INVALID_STATE_EVD_WAITER";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_EVD_ASYNC:
	{
		*message = "DAT_INVALID_STATE_EVD_ASYNC";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_IA_IN_USE:
	{
		*message = "DAT_INVALID_STATE_IA_IN_USE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_LMR_IN_USE:
	{
		*message = "DAT_INVALID_STATE_LMR_IN_USE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_LMR_FREE:
	{
		*message = "DAT_INVALID_STATE_LMR_FREE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_PZ_IN_USE:
	{
		*message = "DAT_INVALID_STATE_PZ_IN_USE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_STATE_PZ_FREE:
	{
		*message = "DAT_INVALID_STATE_PZ_FREE";
		return (DAT_SUCCESS);
	}
	case DAT_PRIVILEGES_READ:
	{
		*message = "DAT_PRIVILEGES_READ";
		return (DAT_SUCCESS);
	}
	case DAT_PRIVILEGES_WRITE:
	{
		*message = "DAT_PRIVILEGES_WRITE";
		return (DAT_SUCCESS);
	}
	case DAT_PRIVILEGES_RDMA_READ:
	{
		*message = "DAT_PRIVILEGES_RDMA_READ";
		return (DAT_SUCCESS);
	}
	case DAT_PRIVILEGES_RDMA_WRITE:
	{
		*message = "DAT_PRIVILEGES_RDMA_WRITE";
		return (DAT_SUCCESS);
	}
	case DAT_PROTECTION_READ:
	{
		*message = "DAT_PROTECTION_READ";
		return (DAT_SUCCESS);
	}
	case DAT_PROTECTION_WRITE:
	{
		*message = "DAT_PROTECTION_WRITE";
		return (DAT_SUCCESS);
	}
	case DAT_PROTECTION_RDMA_READ:
	{
		*message = "DAT_PROTECTION_RDMA_READ";
		return (DAT_SUCCESS);
	}
	case DAT_PROTECTION_RDMA_WRITE:
	{
		*message = "DAT_PROTECTION_RDMA_WRITE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ADDRESS_UNSUPPORTED:
	{
		*message = "DAT_INVALID_ADDRESS_UNSUPPORTED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ADDRESS_UNREACHABLE:
	{
		*message = "DAT_INVALID_ADDRESS_UNREACHABLE";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_ADDRESS_MALFORMED:
	{
		*message = "DAT_INVALID_ADDRESS_MALFORMED";
		return (DAT_SUCCESS);
	}
	case DAT_INVALID_RO_COOKIE:
		*message = "DAT_INVALID_RO_COOKIE";
		return (DAT_SUCCESS);
	default:
	{
		return (DAT_INVALID_PARAMETER);
	}
	}
}


/*
 *
 * External Function Definitions
 *
 */

DAT_RETURN
dat_strerror(
	IN  DAT_RETURN 		value,
	OUT const char 		**major_message,
	OUT const char		**minor_message)
{
	/*
	 * The DAT specification contains a note to implementers
	 * suggesting that the consumer's DAT_RETURN value be used
	 * as an index into a table of text strings. However,
	 * the DAT_RETURN values are not consecutive. Therefore this
	 * implementation does not follow the suggested implementation.
	 */

	if (DAT_SUCCESS != dat_strerror_major(value, major_message)) {
		return (DAT_INVALID_PARAMETER);
	} else if (DAT_SUCCESS != dat_strerror_minor(value, minor_message)) {
		return (DAT_INVALID_PARAMETER);
	} else {
		return (DAT_SUCCESS);
	}
}