summaryrefslogtreecommitdiff
path: root/setup/gen_driver_sco.inc
diff options
context:
space:
mode:
Diffstat (limited to 'setup/gen_driver_sco.inc')
-rw-r--r--setup/gen_driver_sco.inc260
1 files changed, 260 insertions, 0 deletions
diff --git a/setup/gen_driver_sco.inc b/setup/gen_driver_sco.inc
new file mode 100644
index 0000000..279178e
--- /dev/null
+++ b/setup/gen_driver_sco.inc
@@ -0,0 +1,260 @@
+static void
+generate_driver (char *name, conf_t * conf, char *cfg_name, char *cfg_header,
+ char *dirname, char *topdir)
+{
+
+ /* SCO DDI8 version */
+
+
+ FILE *f, *src;
+ char tmp[256], line[256], *p, *s;
+ int i, n = 0;
+ int is_pseudo = 0;
+
+ if (strcmp (conf->bus, "VIRTUAL") == 0)
+ is_pseudo = 1;
+
+ sprintf (tmp, "%s/%s", dirname, cfg_name);
+
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+
+ fprintf (src, "/*\n");
+ fprintf (src, " * Automatically generated file - do not edit.\n");
+ fprintf (src, " */\n");
+ fprintf (src, "#include \"%s\"\n", cfg_header);
+ fprintf (src, "\n");
+
+ fprintf (src, "#include \"%s/%s/module.inc\"\n", topdir, this_os);
+
+ fclose (src);
+
+ sprintf (tmp, "%s/%s", dirname, cfg_header);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+
+ fprintf (src, "/*\n");
+ fprintf (src, " * Automatically generated file - do not edit.\n");
+ fprintf (src, " */\n");
+
+ fprintf (src, "#include <oss_config.h>\n");
+ fprintf (src, "\n");
+
+ fprintf (src, "#define DRIVER_NAME\t%s\n", name);
+ fprintf (src, "#define DRIVER_NICK\t\"%s\"\n", name);
+ fprintf (src, "#define DRIVER_PURPOSE\t\"%s\"\n", conf->purpose);
+ fprintf (src, "#define DRIVER_STR_INFO\t%s_str_info\n", name);
+ fprintf (src, "#define DRIVER_ATTACH\t%s_attach\n", name);
+ fprintf (src, "#define DRIVER_DETACH\t%s_detach\n", name);
+ fprintf (src, "#define DRIVER_TYPE\tDRV_%s\n", conf->bus);
+ fprintf (src, "\n");
+
+ fprintf (src, "extern int DRIVER_ATTACH(oss_device_t *ossdev);\n");
+ fprintf (src, "extern int DRIVER_DETACH(oss_device_t *ossdev);\n");
+
+ fclose (src);
+/*
+ * Generate SCO DDI8 specific config files
+ */
+ sprintf (tmp, "target/build/%s", name);
+ if (mkdir (tmp, 0755) == -1)
+ {
+ perror (tmp);
+ fprintf (stderr, "Cannot make module target directory\n");
+ exit (-1);
+ }
+
+/*
+ * Master file
+ */
+ sprintf (tmp, "target/build/%s/Master", name);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+ fprintf (src, "$version 2\n");
+ fprintf (src, "$contact 4Front Technologies (http://www.opensound.com)\n");
+ fprintf (src, "$interface ddi 8mp\n");
+ fprintf (src, "$depend osscore\n");
+
+ if (is_pseudo)
+ fprintf (src, "%s - R\n", name);
+ else
+ fprintf (src, "%s - h\n", name);
+ fclose (src);
+
+/*
+ * System file
+ */
+ sprintf (tmp, "target/build/%s/System", name);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+ fprintf (src,
+ "* Don't edit this file manually! This information will be ignored.\n");
+ fprintf (src, "*\n");
+ fprintf (src, "$version 2\n");
+ if (is_pseudo)
+ fprintf (src,
+ "%s Y 0 5 0 0 0 0 0 0 -1\n",
+ name);
+ else
+ fprintf (src,
+ "%s Y 0 5 4 0 0 0 0 0 -1\n",
+ name);
+ fclose (src);
+
+/*
+ * Node file
+ */
+ sprintf (tmp, "target/build/%s/Node", name);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+ fprintf (src, "$maxchan 255\n");
+ fprintf (src, "%s %s%%i c 0 0 0 0600\n", name,
+ name);
+ fclose (src);
+
+/*
+ * Drvmap file
+ */
+ sprintf (tmp, "target/build/%s/Drvmap", name);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+ fprintf (src, "%s|Y|N|Sound Boards|OSS %s module\n", name, name);
+
+ if (strcmp (conf->bus, "VIRTUAL") == 0)
+ {
+ fprintf (src, "|||OSS %s pseudo device\n", name);
+ }
+
+ if (strcmp (conf->bus, "PCI") == 0)
+ {
+
+ if ((f = fopen ("devices.list", "r")) == NULL)
+ {
+ perror ("devices.list");
+ exit (-1);
+ }
+
+ while (fgets (line, sizeof (line) - 1, f) != NULL)
+ {
+ int vendor, product;
+ p = line + strlen (line) - 1;
+ if (*p == '\n')
+ *p = 0;
+
+ p = line;
+ while (*p && *p != '\t')
+ p++;
+ if (*p == '\t')
+ *p++ = 0;
+
+ if (strcmp (line, name) != 0)
+ continue;
+
+ n++;
+
+ s = p;
+ while (*p && *p != '\t')
+ p++;
+ if (*p == '\t')
+ *p++ = 0;
+
+ if (strncmp (s, "pci", 3) == 0)
+ {
+ if (sscanf (s + 3, "%x,%x", &vendor, &product) != 2)
+ {
+ fprintf (stderr, "Bad PCI id %s\n", s);
+ }
+
+ fprintf (src, "|PCI|0x%04X%04X|%s\n", vendor, product, p);
+ }
+
+ }
+
+ fclose (f);
+ }
+ fclose (src);
+
+#if 0
+/*
+ * config.h file
+ */
+ sprintf (tmp, "target/build/%s/config.h", name);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+ fclose (src);
+#endif
+
+/*
+ * Space.c file
+ */
+ sprintf (tmp, "target/build/%s/Space.c", name);
+ if ((src = fopen (tmp, "w")) == NULL)
+ {
+ perror (tmp);
+ exit (-1);
+ }
+
+ fprintf (src, "/*\n");
+ fprintf (src, " * NOTICE!\n");
+ fprintf (src, " *\n");
+
+ fprintf (src,
+ " * You need to re-install OSS modules after modifying this file.\n");
+ fprintf (src, " * You need to do the following:\n");
+ fprintf (src, " *\n");
+ fprintf (src, " * \tcd /usr/lib/oss/build\n");
+ fprintf (src, " * \tsh install.sh\n");
+ fprintf (src, " *\n");
+ fprintf (src, " * Each option is documented in the comments below them.\n");
+ fprintf (src, " */\n\n");
+
+/*
+ * Handle driver specific configuration options
+ */
+ sprintf (tmp, "%s/.params", dirname);
+ if ((f = fopen (tmp, "r")) != NULL)
+ {
+ while (fgets (line, sizeof (line) - 1, f) != NULL)
+ {
+ p = line + strlen (line) - 1;
+ if (*p == '\n')
+ *p = 0;
+
+ fprintf (src, "%s\n", line);
+ if (strncmp (line, "int ", 4) == 0)
+ {
+ char *s = line + 4, *p = s;
+
+ while (*p && *p != '=' && *p != ';')
+ p++;
+ *p = 0;
+ }
+ }
+
+ fclose (f);
+ }
+
+ fprintf (src, "\n");
+ fclose (src);
+}