static const char rcsid[] = "$Id: prominterp.c,v 1.1 1997/10/05 04:09:49 jhawk Exp $ ";

#define _KERNEL

#include <sys/types.h>

#include <sys/systm.h>

#include <sys/ddi.h>
#include <sys/kmem.h>
#include <sys/modctl.h>
#include <sys/sunddi.h>

#undef _KERNEL

#include <sys/promif.h>

#include <errno.h>

#define PROMINTERP_SYSCALL 206

static int prominterp_syscall(char *string);

static struct sysent ledsysent = {
  1, /* Number of arguments */
  SE_LOADABLE|SE_ARGC, /* Flags */
  prominterp_syscall
};

static struct modlsys uchownmodlsys = {
  &mod_syscallops,
  "prom interpret syscall",
  &ledsysent
};

static struct modlinkage led_modlinkage = {
  MODREV_1,
  &uchownmodlsys,
  NULL
};

int _fini()
{
  return mod_remove(&led_modlinkage);
}

int _info(struct modinfo *modp)
{
  return mod_info(&led_modlinkage, modp);
}

int _init()
{
  extern char *sysbind;
  extern struct bind *sb_hashtab[];
  char *sysn, *mod_getsysname();

#if 0
  read_binding_file("/etc/name_to_sysnum", sb_hashtab);
  make_syscallname("prominterp", PROMINTERP_SYSCALL);
  if (sysent[PROMINTERP_SYSCALL].sy_call == nosys) {
    if ((sysn = mod_getsysname(PROMINTERP_SYSCALL) != NULL)) {
      sysent[PROMINTERP_SYSCALL].sy_lock =
         (krwlock_t *) kobj_zalloc(sizeof (krwlock_t), KM_SLEEP);
      rw_init(sysent[PROMINTERP_SYSCALL].sy_lock, "prominterp",
	      RW_DEFAULT, DEFAULT_WT);
      printf("Uhoh...\n");
    }
  }
#endif

  return mod_install(&led_modlinkage);
}

static int prominterp_syscall(char *string)
{
  prom_interpret(string, 0, 0, 0, 0, 0);
}

