/* IBM_PROLOG_BEGIN_TAG                                                   */
/* This is an automatically generated prolog.                             */
/*                                                                        */
/* bos720 src/bos/usr/include/diag/tucb.h 1.4                             */
/*                                                                        */
/* Licensed Materials - Property of IBM                                   */
/*                                                                        */
/* Restricted Materials of IBM                                            */
/*                                                                        */
/* COPYRIGHT International Business Machines Corp. 1995,1996              */
/* All Rights Reserved                                                    */
/*                                                                        */
/* US Government Users Restricted Rights - Use, duplication or            */
/* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.      */
/*                                                                        */
/* IBM_PROLOG_END_TAG                                                     */
/* @(#)40	1.4  src/bos/usr/include/diag/tucb.h, cmddiag, bos720 1/16/96 09:26:43 */
/*
 *   COMPONENT_NAME: CMDDIAG
 *
 *   FUNCTIONS: none
 *
 *   ORIGINS: 27
 *
 *
 *   (C) COPYRIGHT International Business Machines Corp. 1995
 *   All Rights Reserved
 *   Licensed Materials - Property of IBM
 *   US Government Users Restricted Rights - Use, duplication or
 *   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
 */

#ifndef _h_tucb
#define _h_tucb

#ifndef OUTPUT_DATA
#define OUTPUT_DATA void
#endif

#ifndef INPUT_DATA
#define INPUT_DATA  void
#endif

/*****************************************************************************/
/* This structure is used for passing of information to the test units.      */
/*****************************************************************************/

typedef struct tucb_in_t {
	ulong tu;		/* Test unit number of the test unit to run. */

        ulong loop;		/* Indicates the number of times the test    */
                		/* unit should be run provided that an error */
				/* does not occur.		             */

        OUTPUT_DATA *data_log;  /* Error details log and or output data log. */
                                /* This log is device specific and is defined*/
                		/* by the {device}_output_data.h file.       */
                		/* It should point to an empty array of      */
                		/* structures and then filled in with output */
                		/* or error detail data by the test unit(s). */
                		/* This parameter should be initialized      */
				/* by the calling application if intended    */
				/* to be used.                               */

        ulong data_log_length;	/* Size of the data_log structure.           */
                		/* This field is used when passing the tucb  */
				/* data to a remote managing application.    */
				/* This number is initialized by the calling */
				/* application by calculating the size of the*/
				/* data structure to be filled in and        */
				/* multiplying it by the number of records to*/
				/* be logged.                                */
				/* The test unit calculates the number of    */
			        /* records by dividing this number by the    */
				/* size of the intended OUTPUT_DATA structure*/
				/* to be used.                               */
				/* A data_log_length value of zero results   */
				/* in no data being logged to the data_log.  */
 
        INPUT_DATA  *tu_data;	/* Input parameter to be used to pass extra  */
                		/* input data to the test units. This        */
			        /* parameter must only be used as special    */
				/* case scenarios. It is intended for        */
				/* special applications such as manufacturing*/
                		/* or hardware exercisers.                   */

        ulong tu_data_length;	/* Size of the tu_data structure.      	     */
                		/* This field is used when passing the tucb  */
				/* data to a remote managing application.    */
				/* This number is initialized by the calling */
				/* application by calculating the size of the*/
				/* data structure to be filled in and        */
				/* multiplying it by the number of records to*/
				/* be logged.                                */
				/* The test unit calculates the number of    */
			        /* data records by dividing this number by   */
				/* the size of the intended INPUT_DATA       */
			        /* structure to be used.                     */

        FILE *msg_file;		/*  Message file pointer which must be 	     */
				/* initialized by the calling application if */
				/* DEBUG output is desired.	             */
} TU_INPUT_TYPE;


/*****************************************************************************/
/* This structure is used for return code information and detailed output.   */
/*****************************************************************************/

/* severity definitions */
#define CRITICAL_FAILURE   0	/* Critical failure		     	     */
#define PARTIAL_FAILURE    1	/* Partial loss of function, performance, or */
				/* resource                                  */
#define LOST_REDUNDANCY    2	/* Increased exposure to secondary failure   */
#define DEFERRABLE_FAILURE  3	/* No immediate exposure, repair can be      */
				/* deferred.                                 */

typedef struct tucb_out_t {
        ulong major_rc;		/* Major return code. Used for FRU isolation.*/
        ulong minor_rc;		/* Minor return code. Used for more granular */
				/* detailed error information. 		     */
        ulong actual_loop;	/* Indicates the number of times the test    */
				/* unit actually ran, or looped. 	     */
        ulong data_log_length;	/* Returns the actual length of the data log */
				/* used                                      */
	ulong severity;	        /* Indicates the severity level of the error.*/
				/* Default value of 0 indicates fatal.       */
} TU_RETURN_TYPE;

/*****************************************************************************/
/* The TU_INFO_HANDLE is a void pointer allowing it to                       */
/* point to data that must remain persistent between test unit               */
/* invocations. This handle is context specific; in that it only has         */
/* meaning for a specific set of test units and can vary between             */
/* test unit sets and operating systems. The TU_INFO_HANDLE is               */
/* supplied by the diagnostic application and is initialized by              */
/* the first test unit, and is used by other test units in subsequent        */
/* invocations of exectu().                                                  */
/*****************************************************************************/

 typedef void *TU_INFO_HANDLE;  /* Test Unit handle containing context       */
				/* specific information for inter-test unit  */
				/* data persistence                          */

/*****************************************************************************/
/* This structure is used for passing of information to the test units.      */
/*****************************************************************************/

typedef struct tucb_t {
        char  *resource_name;	/* Name of hardware/physical device instance */
				/* on which to run the test unit             */
        TU_INPUT_TYPE parms;    /* Input parameters for test unit execution  */
} TU_TYPE;


#endif
