static int pit_read_channel(struct guest_info * core, ushort_t port, void * dst, uint_t length, void * priv_data) {
- struct vm_device * dev = (struct vm_device *)priv_data;
- struct pit * state = (struct pit *)dev->private_data;
+ struct pit * state = (struct pit *)priv_data;
char * val = (char *)dst;
if (length != 1) {
static int pit_write_channel(struct guest_info * core, ushort_t port, void * src, uint_t length, void * priv_data) {
- struct vm_device * dev = (struct vm_device *)priv_data;
- struct pit * state = (struct pit *)dev->private_data;
+ struct pit * state = (struct pit *)priv_data;
char val = *(char *)src;
if (length != 1) {
static int pit_write_command(struct guest_info * core, ushort_t port, void * src, uint_t length, void * priv_data) {
- struct vm_device * dev = (struct vm_device *)priv_data;
- struct pit * state = (struct pit *)dev->private_data;
+ struct pit * state = (struct pit *)priv_data;
struct pit_cmd_word * cmd = (struct pit_cmd_word *)src;
PrintDebug("8254 PIT: Write to PIT Command port\n");
if (state->timer) {
v3_remove_timer(info, state->timer);
}
-
- v3_unhook_io_port(dev->vm, CHANNEL0_PORT);
- v3_unhook_io_port(dev->vm, CHANNEL1_PORT);
- v3_unhook_io_port(dev->vm, CHANNEL2_PORT);
- v3_unhook_io_port(dev->vm, COMMAND_PORT);
- v3_unhook_io_port(dev->vm, SPEAKER_PORT);
-
+
V3_Free(state);
return 0;
}
return -1;
}
- ret |= v3_hook_io_port(vm, CHANNEL0_PORT, &pit_read_channel, &pit_write_channel, dev);
- ret |= v3_hook_io_port(vm, CHANNEL1_PORT, &pit_read_channel, &pit_write_channel, dev);
- ret |= v3_hook_io_port(vm, CHANNEL2_PORT, &pit_read_channel, &pit_write_channel, dev);
- ret |= v3_hook_io_port(vm, COMMAND_PORT, NULL, &pit_write_command, dev);
- ret |= v3_hook_io_port(vm, SPEAKER_PORT, &pit_read_channel, &pit_write_channel, dev);
+ ret |= v3_dev_hook_io(dev, CHANNEL0_PORT, &pit_read_channel, &pit_write_channel);
+ ret |= v3_dev_hook_io(dev, CHANNEL1_PORT, &pit_read_channel, &pit_write_channel);
+ ret |= v3_dev_hook_io(dev, CHANNEL2_PORT, &pit_read_channel, &pit_write_channel);
+ ret |= v3_dev_hook_io(dev, COMMAND_PORT, NULL, &pit_write_command);
+ ret |= v3_dev_hook_io(dev, SPEAKER_PORT, &pit_read_channel, &pit_write_channel);
if (ret != 0) {
PrintError("8254 PIT: Failed to hook IO ports\n");