NetBSD/sys/compat/darwin/darwin_iohidsystem.h
manu bb7e6443cb Remove all our real devices from the IOKit registry, as they won't be
usefull. Emulate only IOHIDSystem, IOFramebuffer and friends in the
registry.

ioreg is able to display the tree and dump the properties.
2003-11-01 18:41:25 +00:00

293 lines
8.3 KiB
C

/* $NetBSD: darwin_iohidsystem.h,v 1.11 2003/11/01 18:41:25 manu Exp $ */
/*-
* Copyright (c) 2003 The NetBSD Foundation, Inc.
* All rights reserved.
*
* This code is derived from software contributed to The NetBSD Foundation
* by Emmanuel Dreyfus
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the NetBSD
* Foundation, Inc. and its contributors.
* 4. Neither the name of The NetBSD Foundation nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _DARWIN_IOHIDSYSTEM_H_
#define _DARWIN_IOHIDSYSTEM_H_
extern struct mach_iokit_devclass darwin_iohidsystem_devclass;
extern struct mach_iokit_devclass darwin_iokbd_devclass;
extern struct mach_iokit_devclass darwin_iomouse_devclass;
extern struct mach_iokit_devclass darwin_ioresources_devclass;
/* Events and event queue */
#define DARWIN_NX_NULLEVENT 0
#define DARWIN_NX_LMOUSEDOWN 1
#define DARWIN_NX_LMOUSEUP 2
#define DARWIN_NX_RMOUSEDOWN 3
#define DARWIN_NX_RMOUSEUP 4
#define DARWIN_NX_MOUSEMOVED 5
#define DARWIN_NX_LMOUSEDRAGGED 6
#define DARWIN_NX_RMOUSEDRAGGED 7
#define DARWIN_NX_MOUSEENTERED 8
#define DARWIN_NX_MOUSEEXITED 9
#define DARWIN_NX_KEYDOWN 10
#define DARWIN_NX_KEYUP 11
#define DARWIN_NX_FLAGSCHANGED 12
#define DARWIN_NX_LMOUSEDOWN_MASK (1 << DARWIN_NX_LMOUSEDOWN)
#define DARWIN_NX_LMOUSEUP_MASK (1 << DARWIN_NX_LMOUSEUP)
#define DARWIN_NX_RMOUSEDOWN_MASK (1 << DARWIN_NX_RMOUSEDOWN)
#define DARWIN_NX_RMOUSEUP_MASK (1 << DARWIN_NX_RMOUSEUP)
#define DARWIN_NX_MOUSEMOVED_MASK (1 << DARWIN_NX_MOUSEMOVED)
#define DARWIN_NX_LMOUSEDRAGGED_MASK (1 << DARWIN_NX_LMOUSEDRAGGED)
#define DARWIN_NX_RMOUSEDRAGGED_MASK (1 << DARWIN_NX_RMOUSEDRAGGED)
#define DARWIN_NX_MOUSEENTERED_MASK (1 << DARWIN_NX_MOUSEENTERED)
#define DARWIN_NX_MOUSEEXITED_MASK (1 << DARWIN_NX_MOUSEEXITED)
#define DARWIN_NX_KEYDOWN_MASK (1 << DARWIN_NX_KEYDOWN)
#define DARWIN_NX_KEYUP_MASK (1 << DARWIN_NX_KEYUP)
#define DARWIN_NX_FLAGSCHANGED_MASK (1 << DARWIN_NX_FLAGSCHANGED)
typedef struct {
uint16_t tabletid;
uint16_t pointerid;
uint16_t deviceid;
uint16_t system_tabletid;
uint16_t vendor_pointertype;
uint32_t pointer_serialnum;
uint64_t uniqueid;
uint32_t cap_mask;
uint8_t ptrtype;
uint8_t enter_proximity;
int16_t reserved1;
} darwin_iohidsystem_tabletproxymity;
typedef struct {
int32_t x;
int32_t y;
int32_t z;
uint16_t buttons;
uint16_t pressure;
struct {
int16_t x;
int16_t y;
} tilt;
uint16_t rotation;
uint16_t tanpressure;
uint16_t devid;
uint16_t vendor1;
uint16_t vendor2;
uint16_t vendor3;
} darwin_iohidsystem_tabletpoint;
typedef union {
struct {
uint8_t subx;
uint8_t suby;
int16_t buttonid;
int32_t click;
uint8_t pressure;
uint8_t reserved1;
uint8_t subtype;
uint8_t reserved2;
uint32_t reserved3;
union {
darwin_iohidsystem_tabletpoint point;
darwin_iohidsystem_tabletproxymity proximity;
} tablet;
} mouse;
struct {
int32_t dx;
int32_t dy;
uint8_t subx;
uint8_t suby;
uint8_t subtype;
uint8_t reserved1;
int32_t reserved2;
union {
darwin_iohidsystem_tabletpoint point;
darwin_iohidsystem_tabletproxymity proximity;
} tablet;
} mouse_move;
struct {
uint16_t orig_charset;
int16_t repeat;
uint16_t charset;
uint16_t charcode;
uint16_t keycode;
uint16_t orig_charcode;
int32_t reserved1;
int32_t keyboardtype;
int32_t reserved2[7];
} key;
struct {
int16_t reserved;
int16_t eventnum;
int32_t trackingnum;
int32_t userdata;
int32_t reserved5[9];
} tracking;
struct {
int16_t da1;
int16_t da2;
int16_t da3;
int16_t reserved1;
int32_t reserved2[10];
} scrollwheel;
struct {
int16_t reserved;
int16_t subtype;
union {
float F[11];
long L[11];
short S[22];
char C[44];
} misc;
} compound;
struct {
int32_t x;
int32_t y;
int32_t z;
uint16_t buttons;
uint16_t pressure;
struct {
int16_t x;
int16_t y;
} tilt;
uint16_t rotation;
int16_t tanpressure;
uint16_t devid;
int16_t vendor1;
int16_t vendor2;
int16_t vendor3;
int32_t reserved[4];
} tablet;
struct {
uint16_t vendorid;
uint16_t tabletid;
uint16_t pointerid;
uint16_t deviceid;
uint16_t systemtabletid;
uint16_t vendor_pointertype;
uint32_t pointer_serialnum;
uint64_t uniqueid;
uint32_t cap_mask;
uint8_t ptr_type;
uint8_t enter_proximity;
int16_t reserved[9];
} proximity;
} darwin_iohidsystem_event_data;
typedef volatile struct {
int die_type;
int die_location_x;
int die_location_y;
unsigned long die_time_hi;
unsigned long die_time_lo;
int die_flags;
unsigned int die_window;
darwin_iohidsystem_event_data die_data;
} darwin_iohidsystem_event;
typedef struct {
int diei_next;
darwin_ev_lock_data_t diei_sem;
/*
* Avoid automatic alignement, this should be
* darwin_iohidsystem_event, we declare it as a char array.
*/
unsigned char diei_event[76];
} darwin_iohidsystem_event_item;
#define DARWIN_IOHIDSYSTEM_EVENTQUEUE_LEN 240
struct darwin_iohidsystem_evglobals {
darwin_ev_lock_data_t evg_cursor_sem;
int evg_event_head;
int evg_event_tail;
int evg_event_last;
int evg_uniq_mouseid;
int evg_buttons;
int evg_event_flags;
int evg_event_time;
darwin_iogpoint evg_cursor_loc;
int evg_cursor_frame;
darwin_iogbounds evg_all_screen;
darwin_iogbounds evg_mouse_rect;
int evg_version;
int evg_struct_size;
int evg_last_frame;
unsigned int evg_reserved1[31];
unsigned evg_reserved2:27;
unsigned evg_want_pressure:1;
unsigned evg_want_precision:1;
unsigned evg_dontwant_coalesce:1;
unsigned evg_dont_coalesce:1;
unsigned evg_mouserect_valid:1;
int evg_moved_mask;
int evg_lastevent_sent;
int evg_lastevent_consumed;
darwin_ev_lock_data_t evg_waitcursor_sem;
int evg_waitcursor;
char evg_waitcursor_timeout;
char evg_waitcursor_enabled;
char evg_globalwaitcursor_enabled;
int evg_waitcursor_threshold;
darwin_iohidsystem_event_item
evg_evqueue[DARWIN_IOHIDSYSTEM_EVENTQUEUE_LEN];
};
/* Shared memory between the IOHIDSystem driver and userland */
struct darwin_iohidsystem_shmem {
int dis_global_offset; /* Offset to global zone, usually 8 */
int dis_private_offset; /* Offset to private memory. Don't care. */
struct darwin_iohidsystem_evglobals dis_evglobals;
};
/* I/O selectors for io_connect_method_{scalar|struct}i_{scalar|struct}o */
#define DARWIN_IOHIDCREATESHMEM 0
#define DARWIN_IOHIDSETEVENTSENABLE 1
#define DARWIN_IOHIDSETCURSORENABLE 2
#define DARWIN_IOHIDPOSTEVENT 3
#define DARWIN_IOHIDSETMOUSELOCATION 4
#define DARWIN_IOHIDGETBUTTONEVENTNUM 5
int darwin_iohidsystem_connect_method_scalari_scalaro(struct mach_trap_args *);
int darwin_iohidsystem_connect_method_structi_structo(struct mach_trap_args *);
int darwin_iohidsystem_connect_map_memory(struct mach_trap_args *);
void darwin_iohidsystem_postfake(struct proc *);
/* I/O notifications: XXX not checked on Darwin */
typedef struct {
mach_msg_header_t req_msgh;
mach_msg_trailer_t req_trailer;
} mach_notify_iohidsystem_request_t;
#endif /* _DARWIN_IOHIDSYSTEM_H_ */