#include "hw-tree.h"
#include "hw-device.h"
+#include "hw-main.h"
#include "hw-base.h"
};
-void
+struct hw *
sim_hw_parse (struct sim_state *sd,
const char *fmt,
...)
{
+ struct hw *current;
va_list ap;
va_start (ap, fmt);
- hw_tree_vparse (STATE_HW (sd)->tree, fmt, ap);
+ current = hw_tree_vparse (STATE_HW (sd)->tree, fmt, ap);
va_end (ap);
+ return current;
}
struct printer {
#endif
}
}
-
-\f
-/* The event queue abstraction (for devices) */
-
-
-struct _hw_event {
- void *data;
- struct hw *me;
- hw_event_handler *handler;
- sim_event *real;
-};
-
-/* Pass the H/W event onto the real handler */
-
-static void
-bounce_hw_event (SIM_DESC sd,
- void *data)
-{
- hw_event event = * (hw_event*) data;
- zfree (data);
- /* if we are delivering an event, we don't have a CPU. */
- STATE_HW (sd)->cpu = NULL;
- event.handler (event.me, event.data);
-}
-
-
-/* Map onto the event functions */
-
-hw_event *
-hw_event_queue_schedule (struct hw *me,
- signed64 delta_time,
- hw_event_handler *handler,
- void *data)
-{
- hw_event *event = ZALLOC (hw_event);
- event->data = data;
- event->handler = handler;
- event->me = me;
- event->real = sim_events_schedule (hw_system (me),
- delta_time,
- bounce_hw_event,
- event);
- return event;
-}
-
-void
-hw_event_queue_deschedule (struct hw *me,
- hw_event *event_to_remove)
-{
- sim_events_deschedule (hw_system (me),
- event_to_remove->real);
- zfree (event_to_remove);
-}
-
-signed64
-hw_event_queue_time (struct hw *me)
-{
- return sim_events_time (hw_system (me));
-}