OpenSolaris_b135/common/mms/h/api/ident_api.h

/*
 * 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 2008 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */


#ifndef _IDENT_API_H_
#define	_IDENT_API_H_
#define	IDENTIFIER_SIZE		64
#define	REGISTRATION_ID_SIZE		32

typedef struct {
	ACS		acs;
	LSM		lsm;
} LSMID;

typedef LSMID		V0_CAPID;
typedef LSMID		V1_CAPID;

typedef struct {
	LSMID		lsm_id;
	CAP		cap;
} CAPID;

typedef struct {
	ACS		acs;
	PORT		port;
} PORTID;

typedef struct {
	LSMID		lsm_id;
	PANEL		panel;
} PANELID;

typedef struct {
	ACS		acs;
	LSM		master_lsm;
	PANEL		master_panel;
	LSM		slave_lsm;
	PANEL		slave_panel;
} PTPID;

typedef struct {
	PANELID		panel_id;
	ROW		begin_row;
	COL		begin_col;
	ROW		end_row;
	COL		end_col;
} SUBPANELID;

typedef struct {
	PANELID		panel_id;
	DRIVE		drive;
} DRIVEID;

typedef struct {
	PANELID		panel_id;
	ROW		row;
	COL		col;
} CELLID;

typedef struct {
	char		external_label[EXTERNAL_LABEL_SIZE + 1];
} VOLID;

typedef struct {
	POOL		pool;
} POOLID;

typedef struct {
	VOLID		startvol;
	VOLID		endvol;
} VOLRANGE;

typedef struct {
	PANEL		panel;
	DRIVE		drive;
} VIRTUAL_TAPE_DRIVE;


typedef struct {
	ACS		acs;
	LSM		lsm;
	VIRTUAL_TAPE_DRIVE vtd;
} VTDID;

typedef struct {
	char		mgmt_clas[MGMT_CLAS_SIZE + 1];
} MGMT_CLAS;

typedef struct {
	char		subpool_name[SUBPOOL_NAME_SIZE + 1];
} SUBPOOL_NAME;

typedef struct {
	char		job_name[JOB_NAME_SIZE + 1];
} JOB_NAME;

typedef struct {
	char		step_name[STEP_NAME_SIZE + 1];
} STEP_NAME;

typedef struct {
	char		dataset_name[DATASET_NAME_SIZE + 1];
} DATASET_NAME;

typedef struct {
	char		groupid[GROUPID_SIZE + 1];
} GROUPID;


typedef struct {
	char		registration[REGISTRATION_ID_SIZE + 1];
} REGISTRATION_ID;

typedef enum {
	EVENT_REGISTER_FIRST = 0,
	EVENT_REGISTER_REGISTERED,
	EVENT_REGISTER_UNREGISTERED,
	EVENT_REGISTER_INVALID_CLASS,
	EVENT_REGISTER_LAST
} EVENT_CLASS_REGISTER_RETURN;

typedef struct {
	EVENT_CLASS_TYPE		event_class;
	EVENT_CLASS_REGISTER_RETURN		register_return;
} REGISTER_STATUS;

typedef enum {
	VOL_FIRST = 0,
	VOL_ENTERED,
	VOL_ADDED,
	VOL_REACTIVATED,
	VOL_EJECTED,
	VOL_DELETED,
	VOL_MARKED_ABSENT,
	VOL_OVER_MAX_CLEAN,
	VOL_CLEAN_CART_SPENT,
	VOL_HOME_LSM_CHG,
	VOL_OWNER_CHG,
	VOL_LAST
} VOL_EVENT_TYPE;

typedef struct {
	VOL_EVENT_TYPE		event_type;
	VOLID		vol_id;
} EVENT_VOLUME_STATUS;

typedef struct {
	PANELID		panel_id;
	HAND		hand;
} HANDID;

#define	ALIGNMENT_PAD_SIZE		32

typedef union {
	ACS		acs_id;
	V0_CAPID		v0_cap_id;
	V1_CAPID		v1_cap_id;
	CAPID		cap_id;
	CELLID		cell_id;
	DRIVEID		drive_id;
	LSMID		lsm_id;
	PANELID		panel_id;
	PORTID		port_id;
	SUBPANELID		subpanel_id;
	VOLID		vol_id;
	POOLID		pool_id;
	LOCKID		lock_id;
	char		socket_name[SOCKET_NAME_SIZE];
	long		request;
	short		lh_error;
	MEDIA_TYPE		media_type;
	DRIVE_TYPE		drive_type;
	HANDID		hand_id;
	PTPID		ptp_id;
	VTDID		vtd_id;
	SUBPOOL_NAME		subpool_name;
	MGMT_CLAS		mgmt_clas;
	JOB_NAME		job_name;
	STEP_NAME		step_name;
	GROUPID		groupid;
	char		alignment_size[ALIGNMENT_PAD_SIZE];
} IDENTIFIER;

typedef enum {
	SENSE_TYPE_FIRST = 0,
	SENSE_TYPE_NONE,
	SENSE_TYPE_HLI,
	SENSE_TYPE_SCSI,
	SENSE_TYPE_FSC,
	RESOURCE_CHANGE_SERIAL_NUM,
	RESOURCE_CHANGE_LSM_TYPE,
	RESOURCE_CHANGE_DRIVE_TYPE,
	DRIVE_ACTIVITY_DATA_TYPE,
	SENSE_TYPE_LAST
} RESOURCE_DATA_TYPE;

typedef struct {
	long		start_time;
	long		completion_time;
	VOLID		vol_id;
	VOLUME_TYPE		volume_type;
	DRIVEID		drive_id;
	POOLID		pool_id;
	CELLID		home_location;
} DRIVE_ACTIVITY_DATA;

typedef union {
	SENSE_HLI		sense_hli;
	SENSE_SCSI		sense_scsi;
	SENSE_FSC		sense_fsc;
	SERIAL_NUM		serial_num;
	LSM_TYPE		lsm_type;
	DRIVE_TYPE		drive_type;
	DRIVE_ACTIVITY_DATA		drive_activity_data;
	char		resource_align_pad[RESOURCE_ALIGN_PAD_SIZE];
} RESOURCE_DATA;

typedef struct {
	TYPE		resource_type;
	IDENTIFIER		resource_identifier;
	RESOURCE_EVENT		resource_event;
	RESOURCE_DATA_TYPE		resource_data_type;
	RESOURCE_DATA		resource_data;
} EVENT_RESOURCE_STATUS;

typedef struct {
	TYPE		event_type;
	RESOURCE_DATA_TYPE		resource_data_type;
	RESOURCE_DATA		resource_data;
} EVENT_DRIVE_STATUS;

#define	MAX_EVENT_CLASS_TYPE 3

typedef struct {
	REGISTRATION_ID		registration_id;
	unsigned short		count;
	REGISTER_STATUS		register_status[MAX_EVENT_CLASS_TYPE];
} EVENT_REGISTER_STATUS;

#define	EVENT_ALIGN_PAD_SIZE		128

typedef union {
	EVENT_REGISTER_STATUS		event_register_status;
	EVENT_VOLUME_STATUS		event_volume_status;
	EVENT_RESOURCE_STATUS		event_resource_status;
	EVENT_DRIVE_STATUS		event_drive_status;
	char		event_align_pad[EVENT_ALIGN_PAD_SIZE];
} EVENT;

#endif /* _IDENT_API_H_ */