xref: /titanic_51/usr/src/cmd/ldmad/ldma.h (revision 6b8303caf3c5c70ae1c1d362bf6de0c55eb622bb)
149bfb42bSAlexandre Chartre /*
249bfb42bSAlexandre Chartre  * CDDL HEADER START
349bfb42bSAlexandre Chartre  *
449bfb42bSAlexandre Chartre  * The contents of this file are subject to the terms of the
549bfb42bSAlexandre Chartre  * Common Development and Distribution License (the "License").
649bfb42bSAlexandre Chartre  * You may not use this file except in compliance with the License.
749bfb42bSAlexandre Chartre  *
849bfb42bSAlexandre Chartre  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
949bfb42bSAlexandre Chartre  * or http://www.opensolaris.org/os/licensing.
1049bfb42bSAlexandre Chartre  * See the License for the specific language governing permissions
1149bfb42bSAlexandre Chartre  * and limitations under the License.
1249bfb42bSAlexandre Chartre  *
1349bfb42bSAlexandre Chartre  * When distributing Covered Code, include this CDDL HEADER in each
1449bfb42bSAlexandre Chartre  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
1549bfb42bSAlexandre Chartre  * If applicable, add the following below this CDDL HEADER, with the
1649bfb42bSAlexandre Chartre  * fields enclosed by brackets "[]" replaced with your own identifying
1749bfb42bSAlexandre Chartre  * information: Portions Copyright [yyyy] [name of copyright owner]
1849bfb42bSAlexandre Chartre  *
1949bfb42bSAlexandre Chartre  * CDDL HEADER END
2049bfb42bSAlexandre Chartre  */
2149bfb42bSAlexandre Chartre 
2249bfb42bSAlexandre Chartre /*
2349bfb42bSAlexandre Chartre  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
2449bfb42bSAlexandre Chartre  * Use is subject to license terms.
2549bfb42bSAlexandre Chartre  */
2649bfb42bSAlexandre Chartre 
2749bfb42bSAlexandre Chartre #ifndef _LDMA_H
2849bfb42bSAlexandre Chartre #define	_LDMA_H
2949bfb42bSAlexandre Chartre 
3049bfb42bSAlexandre Chartre #include <libds.h>
3149bfb42bSAlexandre Chartre #include <sys/sysmacros.h>
3249bfb42bSAlexandre Chartre #include <sys/types.h>
3349bfb42bSAlexandre Chartre 
34*6b8303caSAlexandre Chartre #ifdef __cplusplus
35*6b8303caSAlexandre Chartre extern "C" {
36*6b8303caSAlexandre Chartre #endif
37*6b8303caSAlexandre Chartre 
3849bfb42bSAlexandre Chartre /*
3949bfb42bSAlexandre Chartre  * The following definitions are part of the LDoms Agent specification.
4049bfb42bSAlexandre Chartre  */
4149bfb42bSAlexandre Chartre 
4249bfb42bSAlexandre Chartre /* reply message types */
4349bfb42bSAlexandre Chartre #define	LDMA_MSG_RESULT			0x8000	/* result message */
4449bfb42bSAlexandre Chartre #define	LDMA_MSG_ERROR			0x8001	/* error message */
4549bfb42bSAlexandre Chartre 
4649bfb42bSAlexandre Chartre /* error codes for error messages */
4749bfb42bSAlexandre Chartre #define	LDMA_MSGERR_FAIL		0x0000	/* request has failed */
4849bfb42bSAlexandre Chartre #define	LDMA_MSGERR_INVALID		0x8001	/* request is invalid */
4949bfb42bSAlexandre Chartre #define	LDMA_MSGERR_NOTSUP		0x8002	/* request is not supported */
5049bfb42bSAlexandre Chartre #define	LDMA_MSGERR_DENY		0x8003	/* request is denied */
5149bfb42bSAlexandre Chartre 
5249bfb42bSAlexandre Chartre /*
5349bfb42bSAlexandre Chartre  * LDoms Device Agent
5449bfb42bSAlexandre Chartre  */
5549bfb42bSAlexandre Chartre #define	LDMA_NAME_DEVICE		"agent-device"
5649bfb42bSAlexandre Chartre 
5749bfb42bSAlexandre Chartre #define	LDMA_MSGDEV_VALIDATE_PATH	0x01	/* validate path */
5849bfb42bSAlexandre Chartre #define	LDMA_MSGDEV_VALIDATE_NIC	0x02	/* validate network interface */
5949bfb42bSAlexandre Chartre 
6049bfb42bSAlexandre Chartre #define	LDMA_DEVPATH_EXIST		0x01	/* path is accessible */
6149bfb42bSAlexandre Chartre #define	LDMA_DEVPATH_OPENRW		0x02	/* path can be opened rw */
6249bfb42bSAlexandre Chartre #define	LDMA_DEVPATH_OPENRO		0x04	/* path can be opened ro */
6349bfb42bSAlexandre Chartre 
6449bfb42bSAlexandre Chartre #define	LDMA_DEVPATH_TYPE_UNKNOWN	0x00	/* path points to unknown */
6549bfb42bSAlexandre Chartre #define	LDMA_DEVPATH_TYPE_FILE		0x01    /* path points to a file */
6649bfb42bSAlexandre Chartre #define	LDMA_DEVPATH_TYPE_DEVICE	0x02	/* path points to a device */
6749bfb42bSAlexandre Chartre 
6849bfb42bSAlexandre Chartre #define	LDMA_DEVNIC_EXIST		0x01	/* nic is accessible */
6949bfb42bSAlexandre Chartre 
7049bfb42bSAlexandre Chartre /*
7149bfb42bSAlexandre Chartre  * LDoms System Agent
7249bfb42bSAlexandre Chartre  */
7349bfb42bSAlexandre Chartre #define	LDMA_NAME_SYSTEM		"agent-system"
7449bfb42bSAlexandre Chartre 
7549bfb42bSAlexandre Chartre #define	LDMA_MSGSYS_GET_SYSINFO		0x01	/* get system info request */
7649bfb42bSAlexandre Chartre 
7749bfb42bSAlexandre Chartre /*
7849bfb42bSAlexandre Chartre  * Size of the header of an agent message. This is the minimal size that
7949bfb42bSAlexandre Chartre  * a message can have.
8049bfb42bSAlexandre Chartre  */
8149bfb42bSAlexandre Chartre #define	LDMA_MESSAGE_HEADER_SIZE	(sizeof (ldma_message_header_t))
8249bfb42bSAlexandre Chartre 
8349bfb42bSAlexandre Chartre /*
8449bfb42bSAlexandre Chartre  * Macro to compute the size of a message with a msg_data of size dlen.
8549bfb42bSAlexandre Chartre  * The size of the msg_data field must be a multiple of 8-bytes so dlen
8649bfb42bSAlexandre Chartre  * is roundup to an 8-bytes multiple.
8749bfb42bSAlexandre Chartre  */
8849bfb42bSAlexandre Chartre #define	LDMA_MESSAGE_SIZE(dlen)	(LDMA_MESSAGE_HEADER_SIZE + P2ROUNDUP(dlen, 8))
8949bfb42bSAlexandre Chartre 
9049bfb42bSAlexandre Chartre /*
9149bfb42bSAlexandre Chartre  * Macro to compute the size of the msg_data field from the size of the message.
9249bfb42bSAlexandre Chartre  */
9349bfb42bSAlexandre Chartre #define	LDMA_MESSAGE_DLEN(msgsize)	((msgsize) - LDMA_MESSAGE_HEADER_SIZE)
9449bfb42bSAlexandre Chartre 
9549bfb42bSAlexandre Chartre /*
9649bfb42bSAlexandre Chartre  * Handy macros for using the message and header structures.
9749bfb42bSAlexandre Chartre  */
9849bfb42bSAlexandre Chartre #define	LDMA_HDR2MSG(hdr)	((ldma_message_t *)(hdr))
9949bfb42bSAlexandre Chartre #define	LDMA_HDR2DATA(hdr)	(LDMA_HDR2MSG(hdr)->msg_data)
10049bfb42bSAlexandre Chartre #define	LDMA_MSG2HDR(msg)	((ldma_message_header_t *)(msg))
10149bfb42bSAlexandre Chartre 
10249bfb42bSAlexandre Chartre /* agent message header structure */
10349bfb42bSAlexandre Chartre typedef struct ldma_message_header {
10449bfb42bSAlexandre Chartre 	uint64_t	msg_num; 	/* message number */
10549bfb42bSAlexandre Chartre 	uint32_t	msg_type;	/* message type */
10649bfb42bSAlexandre Chartre 	uint32_t	msg_info;	/* message info */
10749bfb42bSAlexandre Chartre } ldma_message_header_t;
10849bfb42bSAlexandre Chartre 
10949bfb42bSAlexandre Chartre /* agent message structure */
11049bfb42bSAlexandre Chartre typedef struct ldma_message {
11149bfb42bSAlexandre Chartre 	ldma_message_header_t	msg_hdr;	/* message header */
11249bfb42bSAlexandre Chartre 	char			msg_data[1];	/* message data */
11349bfb42bSAlexandre Chartre } ldma_message_t;
11449bfb42bSAlexandre Chartre 
11549bfb42bSAlexandre Chartre /*
11649bfb42bSAlexandre Chartre  * Additional structures and definition for the implementation.
11749bfb42bSAlexandre Chartre  */
11849bfb42bSAlexandre Chartre typedef enum ldma_request_status_t {
11949bfb42bSAlexandre Chartre 	LDMA_REQ_COMPLETED,		/* request was completed */
12049bfb42bSAlexandre Chartre 	LDMA_REQ_FAILED,		/* request has failed */
12149bfb42bSAlexandre Chartre 	LDMA_REQ_INVALID,		/* request is invalid */
12249bfb42bSAlexandre Chartre 	LDMA_REQ_NOTSUP,		/* request is not supported */
12349bfb42bSAlexandre Chartre 	LDMA_REQ_DENIED			/* request was denied */
12449bfb42bSAlexandre Chartre } ldma_request_status_t;
12549bfb42bSAlexandre Chartre 
12649bfb42bSAlexandre Chartre typedef ldma_request_status_t (ldm_msg_func_t)(ds_ver_t *,
12749bfb42bSAlexandre Chartre     ldma_message_header_t *, size_t, ldma_message_header_t **, size_t *);
12849bfb42bSAlexandre Chartre 
12949bfb42bSAlexandre Chartre typedef struct ldma_msg_handler {
13049bfb42bSAlexandre Chartre 	uint32_t		msg_type; 	/* message type */
13149bfb42bSAlexandre Chartre 	ldm_msg_func_t		*msg_handler;	/* message handler */
13249bfb42bSAlexandre Chartre } ldma_msg_handler_t;
13349bfb42bSAlexandre Chartre 
13449bfb42bSAlexandre Chartre typedef struct ldma_agent_info {
13549bfb42bSAlexandre Chartre 	char			*name;		/* agent name */
13649bfb42bSAlexandre Chartre 	ds_ver_t		*vers;		/* supported versions */
13749bfb42bSAlexandre Chartre 	int			nvers;		/* number of versions */
13849bfb42bSAlexandre Chartre 	ldma_msg_handler_t	*handlers;	/* message handlers */
13949bfb42bSAlexandre Chartre 	int			nhandlers;	/* number of handlers */
14049bfb42bSAlexandre Chartre } ldma_agent_info_t;
14149bfb42bSAlexandre Chartre 
14249bfb42bSAlexandre Chartre /*
14349bfb42bSAlexandre Chartre  * Helper functions for the daemon and agents.
14449bfb42bSAlexandre Chartre  */
14549bfb42bSAlexandre Chartre 
14649bfb42bSAlexandre Chartre /* function to allocate a result message */
14749bfb42bSAlexandre Chartre ldma_message_header_t *ldma_alloc_result_msg(ldma_message_header_t *, size_t);
14849bfb42bSAlexandre Chartre 
14949bfb42bSAlexandre Chartre /* functions to log messages */
15049bfb42bSAlexandre Chartre void ldma_err(char *module, char *fmt, ...);
15149bfb42bSAlexandre Chartre void ldma_info(char *module, char *fmt, ...);
15249bfb42bSAlexandre Chartre void ldma_dbg(char *module, char *fmt, ...);
15349bfb42bSAlexandre Chartre 
15449bfb42bSAlexandre Chartre /*
15549bfb42bSAlexandre Chartre  * Macros to log messages. Each module/file using these macros should define
15649bfb42bSAlexandre Chartre  * LDMA_MODULE as the name under which messages are logged. For a given agent,
15749bfb42bSAlexandre Chartre  * LDMA_MODULE should be set to the name of the agent.
15849bfb42bSAlexandre Chartre  */
15949bfb42bSAlexandre Chartre #define	LDMA_ERR(...)	ldma_err(LDMA_MODULE, __VA_ARGS__)
16049bfb42bSAlexandre Chartre #define	LDMA_INFO(...)	ldma_info(LDMA_MODULE, __VA_ARGS__)
16149bfb42bSAlexandre Chartre #define	LDMA_DBG(...)	ldma_dbg(LDMA_MODULE, __VA_ARGS__)
16249bfb42bSAlexandre Chartre 
16349bfb42bSAlexandre Chartre #ifdef __cplusplus
16449bfb42bSAlexandre Chartre }
16549bfb42bSAlexandre Chartre #endif
16649bfb42bSAlexandre Chartre 
16749bfb42bSAlexandre Chartre #endif /* _LDMA_H */
168