-/*
- * timeout / untimeout (converted to dtrace_timeout / dtrace_untimeout due to name collision)
- */
-
-thread_call_t
-dtrace_timeout(void (*func)(void *, void *), void* arg, uint64_t nanos)
-{
-#pragma unused(arg)
- thread_call_t call = thread_call_allocate(func, NULL);
-
- nanoseconds_to_absolutetime(nanos, &nanos);
-
- /*
- * This method does not use clock_deadline_for_periodic_event() because it is a one-shot,
- * and clock drift on later invocations is not a worry.
- */
- uint64_t deadline = mach_absolute_time() + nanos;
- /* DRK: consider using a lower priority callout here */
- thread_call_enter_delayed(call, deadline);
-
- return call;
-}
-
-/*
- * ddi
- */
-void
-ddi_report_dev(dev_info_t *devi)
-{
-#pragma unused(devi)
-}
-
-#define NSOFT_STATES 32 /* XXX No more than 32 clients at a time, please. */
-static void *soft[NSOFT_STATES];
-
-int
-ddi_soft_state_init(void **state_p, size_t size, size_t n_items)
-{
-#pragma unused(n_items)
- int i;
-
- for (i = 0; i < NSOFT_STATES; ++i) soft[i] = _MALLOC(size, M_TEMP, M_ZERO | M_WAITOK);
- *(size_t *)state_p = size;
- return 0;
-}
-
-int
-ddi_soft_state_zalloc(void *state, int item)
-{
-#pragma unused(state)
- if (item < NSOFT_STATES)
- return DDI_SUCCESS;
- else
- return DDI_FAILURE;
-}
-
-void *
-ddi_get_soft_state(void *state, int item)
-{
-#pragma unused(state)
- ASSERT(item < NSOFT_STATES);
- return soft[item];
-}
-
-int
-ddi_soft_state_free(void *state, int item)
-{
- ASSERT(item < NSOFT_STATES);
- bzero( soft[item], (size_t)state );
- return DDI_SUCCESS;
-}
-
-void
-ddi_soft_state_fini(void **state_p)
-{
-#pragma unused(state_p)
- int i;
-
- for (i = 0; i < NSOFT_STATES; ++i) _FREE( soft[i], M_TEMP );
-}
-
-static unsigned int gRegisteredProps = 0;
-static struct {
- char name[32]; /* enough for "dof-data-" + digits */
- int *data;
- uint_t nelements;
-} gPropTable[16];
-
-kern_return_t _dtrace_register_anon_DOF(char *, uchar_t *, uint_t);
-
-kern_return_t
-_dtrace_register_anon_DOF(char *name, uchar_t *data, uint_t nelements)
-{
- if (gRegisteredProps < sizeof(gPropTable)/sizeof(gPropTable[0])) {
- int *p = (int *)_MALLOC(nelements*sizeof(int), M_TEMP, M_WAITOK);
-
- if (NULL == p)
- return KERN_FAILURE;
-
- strlcpy(gPropTable[gRegisteredProps].name, name, sizeof(gPropTable[0].name));
- gPropTable[gRegisteredProps].nelements = nelements;
- gPropTable[gRegisteredProps].data = p;
-
- while (nelements-- > 0) {
- *p++ = (int)(*data++);
- }
-
- gRegisteredProps++;
- return KERN_SUCCESS;
- }
- else
- return KERN_FAILURE;
-}
-
-int
-ddi_prop_lookup_int_array(dev_t match_dev, dev_info_t *dip, uint_t flags,
- const char *name, int **data, uint_t *nelements)
-{
-#pragma unused(match_dev,dip,flags)
- unsigned int i;
- for (i = 0; i < gRegisteredProps; ++i)
- {
- if (0 == strncmp(name, gPropTable[i].name,
- sizeof(gPropTable[i].name))) {
- *data = gPropTable[i].data;
- *nelements = gPropTable[i].nelements;
- return DDI_SUCCESS;
- }
- }
- return DDI_FAILURE;
-}
-