Skip to content

Commit

Permalink
adb: QOM'ify Apple Desktop Bus
Browse files Browse the repository at this point in the history
It was not a qbus before, turn it into a first-class bus and initialize
it properly from CUDA. Leave it a global variable as long as devices are
not QOM'ified yet.

Signed-off-by: Andreas Färber <[email protected]>
Signed-off-by: Alexander Graf <[email protected]>
  • Loading branch information
afaerber authored and agraf committed Jan 25, 2013
1 parent 45fa67f commit 84ede32
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 3 deletions.
14 changes: 14 additions & 0 deletions hw/adb.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,12 @@ static ADBDevice *adb_register_device(ADBBusState *s, int devaddr,
return d;
}

static const TypeInfo adb_bus_type_info = {
.name = TYPE_ADB_BUS,
.parent = TYPE_BUS,
.instance_size = sizeof(ADBBusState),
};

/***************************************************************/
/* Keyboard ADB device */

Expand Down Expand Up @@ -453,3 +459,11 @@ void adb_mouse_init(ADBBusState *bus)
qemu_add_mouse_event_handler(adb_mouse_event, d, 0, "QEMU ADB Mouse");
vmstate_register(NULL, -1, &vmstate_adb_mouse, s);
}


static void adb_register_types(void)
{
type_register_static(&adb_bus_type_info);
}

type_init(adb_register_types)
16 changes: 13 additions & 3 deletions hw/adb.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,13 @@
#if !defined(__ADB_H__)
#define __ADB_H__

#include "qdev.h"

#define MAX_ADB_DEVICES 16

#define ADB_MAX_OUT_LEN 16

typedef struct ADBBusState ADBBusState;
typedef struct ADBDevice ADBDevice;

/* buf = NULL means polling */
Expand All @@ -38,19 +41,26 @@ typedef int ADBDeviceRequest(ADBDevice *d, uint8_t *buf_out,
typedef int ADBDeviceReset(ADBDevice *d);

struct ADBDevice {
struct ADBBusState *bus;
ADBBusState *bus;
int devaddr;
int handler;
ADBDeviceRequest *devreq;
ADBDeviceReset *devreset;
void *opaque;
};

typedef struct ADBBusState {
#define TYPE_ADB_BUS "apple-desktop-bus"
#define ADB_BUS(obj) OBJECT_CHECK(ADBBusState, (obj), TYPE_ADB_BUS)

struct ADBBusState {
/*< private >*/
BusState parent_obj;
/*< public >*/

ADBDevice devices[MAX_ADB_DEVICES];
int nb_devices;
int poll_index;
} ADBBusState;
};

int adb_request(ADBBusState *s, uint8_t *buf_out,
const uint8_t *buf, int len);
Expand Down
3 changes: 3 additions & 0 deletions hw/cuda.c
Original file line number Diff line number Diff line change
Expand Up @@ -712,6 +712,9 @@ static void cuda_initfn(Object *obj)
for (i = 0; i < ARRAY_SIZE(s->timers); i++) {
s->timers[i].index = i;
}

qbus_create_inplace((BusState *)&adb_bus, TYPE_ADB_BUS, DEVICE(obj),
"adb.0");
}

static void cuda_class_init(ObjectClass *oc, void *data)
Expand Down

0 comments on commit 84ede32

Please sign in to comment.