/*
* 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 2006 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_CONSMS_H
#define _SYS_CONSMS_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
/*
* Those default values are taken from lower mice drivers.
*/
#define CONSMS_SR_DEFAULT_HEIGHT 768
#define CONSMS_SR_DEFAULT_WIDTH 1024
#define CONSMS_PARMS_DEFAULT_JITTER 0
#define CONSMS_PARMS_DEFAULT_SPEED_LAW 0
#define CONSMS_PARMS_DEFAULT_SPEED_LIMIT 48
#define CONSMS_MAX(x, y) ((x) > (y) ? (x) : (y))
/*
* These states are only used when an underlying mouse
* is being linked under the virtual mouse (/dev/mouse),
* in order to set some cached state variables. And these
* states go in a sequential way.
*/
typedef enum {
LQS_START = 0, /* begin of initializing */
LQS_BUTTON_COUNT_PENDING = 1, /* wait for button count ACK */
LQS_WHEEL_COUNT_PENDING = 2, /* wait for wheel count ACK */
LQS_SET_VUID_FORMAT_PENDING = 3, /* wait for set format ACK */
LQS_SET_WHEEL_STATE_PENDING = 4, /* wait for wheel state ACK */
LQS_SET_PARMS_PENDING = 5, /* wait for parameters ACK */
LQS_SET_RESOLUTION_PENDING = 6, /* wait for resolution ACK */
LQS_DONE = 7 /* mark end of initialization */
} consms_lq_state_t;
struct consms_lq;
typedef void (*ioc_reply_func_t)(struct consms_lq *, mblk_t *);
/*
* This structure contains information
* for each underlying physical mouse
* (lower queue).
*/
typedef struct consms_lq {
struct consms_lq *lq_next; /* next lower queue */
consms_lq_state_t lq_state; /* used during initializing */
queue_t *lq_queue; /* lower write q */
ioc_reply_func_t lq_ioc_reply_func; /* reply function */
mblk_t *lq_pending_plink; /* pending msg */
queue_t *lq_pending_queue; /* upper write q */
int lq_num_buttons; /* number of buttons */
int lq_num_wheels; /* number of wheels */
ushort_t lq_wheel_state_bf; /* enabled/disabled */
} consms_lq_t;
/*
* This structure is used to remember the
* COPYIN and COPYOUT request mp from lower
* queue during transparent ioctl.
*/
typedef struct consms_response {
struct consms_response *rsp_next;
mblk_t *rsp_mp; /* response mp (M_COPYIN or M_COPYOUT) */
queue_t *rsp_queue; /* lower read q giving this response */
} consms_response_t;
/*
* This structure contains information for
* each ioctl message from upper layer
* (usually, X server).
*/
typedef struct consms_msg {
struct consms_msg *msg_next;
uint_t msg_id; /* taken from request message */
int msg_num_requests; /* # of lower queues dispatched */
int msg_num_responses; /* # of responses from lower queues */
mblk_t *msg_request; /* pending request message from upper */
queue_t *msg_queue; /* upper write q used for qrely() */
/*
* ack_mp is just used for IOCACK
* and rsp_list is only used for COPYIN
* or COPYOUT responses from lowers
*/
mblk_t *msg_ack_mp; /* IOCACK from lower */
consms_response_t *msg_rsp_list; /* responses from lower */
} consms_msg_t;
/*
* This structure contains information
* about virtual mouse (lower queue list,
* and virtual mouse state variables).
*/
typedef struct consms_state {
consms_lq_t *consms_lqs; /* lower queues */
int consms_num_lqs; /* # of lower queues */
/* virtual mouse state variables */
int consms_vuid_format; /* NATIVE or VUID_FIRM */
int consms_num_buttons; /* max number of buttons */
int consms_num_wheels; /* max number of wheels */
ushort_t consms_wheel_state_bf; /* wheel enabled or disabled */
Ms_parms consms_ms_parms; /* parameters for usb mouse */
Ms_screen_resolution consms_ms_sr; /* for absolute mouse */
} consms_state_t;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_CONSMS_H */