xref: /openbmc/qemu/include/hw/input/adb.h (revision 0d09e41a)
1*0d09e41aSPaolo Bonzini /*
2*0d09e41aSPaolo Bonzini  * QEMU ADB emulation shared definitions and prototypes
3*0d09e41aSPaolo Bonzini  *
4*0d09e41aSPaolo Bonzini  * Copyright (c) 2004-2007 Fabrice Bellard
5*0d09e41aSPaolo Bonzini  * Copyright (c) 2007 Jocelyn Mayer
6*0d09e41aSPaolo Bonzini  *
7*0d09e41aSPaolo Bonzini  * Permission is hereby granted, free of charge, to any person obtaining a copy
8*0d09e41aSPaolo Bonzini  * of this software and associated documentation files (the "Software"), to deal
9*0d09e41aSPaolo Bonzini  * in the Software without restriction, including without limitation the rights
10*0d09e41aSPaolo Bonzini  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11*0d09e41aSPaolo Bonzini  * copies of the Software, and to permit persons to whom the Software is
12*0d09e41aSPaolo Bonzini  * furnished to do so, subject to the following conditions:
13*0d09e41aSPaolo Bonzini  *
14*0d09e41aSPaolo Bonzini  * The above copyright notice and this permission notice shall be included in
15*0d09e41aSPaolo Bonzini  * all copies or substantial portions of the Software.
16*0d09e41aSPaolo Bonzini  *
17*0d09e41aSPaolo Bonzini  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18*0d09e41aSPaolo Bonzini  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19*0d09e41aSPaolo Bonzini  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20*0d09e41aSPaolo Bonzini  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21*0d09e41aSPaolo Bonzini  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22*0d09e41aSPaolo Bonzini  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23*0d09e41aSPaolo Bonzini  * THE SOFTWARE.
24*0d09e41aSPaolo Bonzini  */
25*0d09e41aSPaolo Bonzini 
26*0d09e41aSPaolo Bonzini #if !defined(__ADB_H__)
27*0d09e41aSPaolo Bonzini #define __ADB_H__
28*0d09e41aSPaolo Bonzini 
29*0d09e41aSPaolo Bonzini #include "hw/qdev.h"
30*0d09e41aSPaolo Bonzini 
31*0d09e41aSPaolo Bonzini #define MAX_ADB_DEVICES 16
32*0d09e41aSPaolo Bonzini 
33*0d09e41aSPaolo Bonzini #define ADB_MAX_OUT_LEN 16
34*0d09e41aSPaolo Bonzini 
35*0d09e41aSPaolo Bonzini typedef struct ADBBusState ADBBusState;
36*0d09e41aSPaolo Bonzini typedef struct ADBDevice ADBDevice;
37*0d09e41aSPaolo Bonzini 
38*0d09e41aSPaolo Bonzini /* buf = NULL means polling */
39*0d09e41aSPaolo Bonzini typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
40*0d09e41aSPaolo Bonzini                               const uint8_t *buf, int len);
41*0d09e41aSPaolo Bonzini 
42*0d09e41aSPaolo Bonzini #define TYPE_ADB_DEVICE "adb-device"
43*0d09e41aSPaolo Bonzini #define ADB_DEVICE(obj) OBJECT_CHECK(ADBDevice, (obj), TYPE_ADB_DEVICE)
44*0d09e41aSPaolo Bonzini 
45*0d09e41aSPaolo Bonzini struct ADBDevice {
46*0d09e41aSPaolo Bonzini     /*< private >*/
47*0d09e41aSPaolo Bonzini     DeviceState parent_obj;
48*0d09e41aSPaolo Bonzini     /*< public >*/
49*0d09e41aSPaolo Bonzini 
50*0d09e41aSPaolo Bonzini     int devaddr;
51*0d09e41aSPaolo Bonzini     int handler;
52*0d09e41aSPaolo Bonzini };
53*0d09e41aSPaolo Bonzini 
54*0d09e41aSPaolo Bonzini #define ADB_DEVICE_CLASS(cls) \
55*0d09e41aSPaolo Bonzini     OBJECT_CLASS_CHECK(ADBDeviceClass, (cls), TYPE_ADB_DEVICE)
56*0d09e41aSPaolo Bonzini #define ADB_DEVICE_GET_CLASS(obj) \
57*0d09e41aSPaolo Bonzini     OBJECT_GET_CLASS(ADBDeviceClass, (obj), TYPE_ADB_DEVICE)
58*0d09e41aSPaolo Bonzini 
59*0d09e41aSPaolo Bonzini typedef struct ADBDeviceClass {
60*0d09e41aSPaolo Bonzini     /*< private >*/
61*0d09e41aSPaolo Bonzini     DeviceClass parent_class;
62*0d09e41aSPaolo Bonzini     /*< public >*/
63*0d09e41aSPaolo Bonzini 
64*0d09e41aSPaolo Bonzini     ADBDeviceRequest *devreq;
65*0d09e41aSPaolo Bonzini } ADBDeviceClass;
66*0d09e41aSPaolo Bonzini 
67*0d09e41aSPaolo Bonzini #define TYPE_ADB_BUS "apple-desktop-bus"
68*0d09e41aSPaolo Bonzini #define ADB_BUS(obj) OBJECT_CHECK(ADBBusState, (obj), TYPE_ADB_BUS)
69*0d09e41aSPaolo Bonzini 
70*0d09e41aSPaolo Bonzini struct ADBBusState {
71*0d09e41aSPaolo Bonzini     /*< private >*/
72*0d09e41aSPaolo Bonzini     BusState parent_obj;
73*0d09e41aSPaolo Bonzini     /*< public >*/
74*0d09e41aSPaolo Bonzini 
75*0d09e41aSPaolo Bonzini     ADBDevice *devices[MAX_ADB_DEVICES];
76*0d09e41aSPaolo Bonzini     int nb_devices;
77*0d09e41aSPaolo Bonzini     int poll_index;
78*0d09e41aSPaolo Bonzini };
79*0d09e41aSPaolo Bonzini 
80*0d09e41aSPaolo Bonzini int adb_request(ADBBusState *s, uint8_t *buf_out,
81*0d09e41aSPaolo Bonzini                 const uint8_t *buf, int len);
82*0d09e41aSPaolo Bonzini int adb_poll(ADBBusState *s, uint8_t *buf_out);
83*0d09e41aSPaolo Bonzini 
84*0d09e41aSPaolo Bonzini #define TYPE_ADB_KEYBOARD "adb-keyboard"
85*0d09e41aSPaolo Bonzini #define TYPE_ADB_MOUSE "adb-mouse"
86*0d09e41aSPaolo Bonzini 
87*0d09e41aSPaolo Bonzini #endif /* !defined(__ADB_H__) */
88