2
generate_driver (char *name, conf_t * conf, char *cfg_name, char *cfg_header,
3
char *dirname, char *topdir)
10
char tmp[256], line[256], *p, *s;
12
char *options[MAXOPTS];
15
sprintf (tmp, "%s/%s", dirname, cfg_name);
17
if ((src = fopen (tmp, "w")) == NULL)
23
fprintf (src, "/*\n");
24
fprintf (src, " * Automatically generated file - do not edit.\n");
25
fprintf (src, " */\n");
28
* Handle driver specific configuration options
30
sprintf (tmp, "%s/.params", dirname);
31
if ((f = fopen (tmp, "r")) != NULL)
33
while (fgets (line, sizeof (line) - 1, f) != NULL)
35
p = line + strlen (line) - 1;
39
fprintf (src, "%s\n", line);
40
if (strncmp (line, "int ", 4) == 0)
42
char *s = line + 4, *p = s;
44
while (*p && *p != '=' && *p != ';')
49
fprintf (stderr, "Too many options for driver '%s' (%d)\n",
54
options[nopts++] = strdup (s);
62
fprintf (src, "#include \"%s\"\n", cfg_header);
66
/* Not needed for Solaris */
67
fprintf (src, "oss_device_table_t %s_devid_list[]=\n", name);
70
if ((f = fopen ("devices.list", "r")) == NULL)
72
perror ("devices.list");
76
while (fgets (line, sizeof (line) - 1, f) != NULL)
78
p = line + strlen (line) - 1;
83
while (*p && *p != '\t')
88
if (strcmp (line, name) != 0)
94
while (*p && *p != '\t')
99
fprintf (src, "\t{\"%s\", \"%s\"},\n", s, p);
104
fprintf (src, "\t{NULL}\n");
105
fprintf (src, "};\n");
109
* Create the driver specific option list
111
fprintf (src, "oss_option_map_t local_driver_options[] =\n");
112
fprintf (src, "{\n");
113
for (i = 0; i < nopts; i++)
114
fprintf (src, "\t{\"%s\", &%s},\n", options[i], options[i]);
115
fprintf (src, "\t{NULL, NULL}\n");
116
fprintf (src, "};\n");
119
fprintf (src, "#include \"%s/%s/module.inc\"\n", topdir, this_os);
125
"Warning: No device entries (devices.list) for driver %s\n",
132
sprintf (tmp, "%s/%s", dirname, cfg_header);
133
if ((src = fopen (tmp, "w")) == NULL)
139
fprintf (src, "/*\n");
140
fprintf (src, " * Automatically generated file - do not edit.\n");
141
fprintf (src, " */\n");
143
fprintf (src, "#include <oss_config.h>\n");
146
fprintf (src, "#define DRIVER_NAME\t%s\n", name);
147
fprintf (src, "#define DRIVER_NICK\t\"%s\"\n", name);
148
fprintf (src, "#define DRIVER_PURPOSE\t\"%s\"\n", conf->purpose);
149
fprintf (src, "#define DRIVER_STR_INFO\t%s_str_info\n", name);
150
fprintf (src, "#define DRIVER_ATTACH\t%s_attach\n", name);
151
fprintf (src, "#define DRIVER_DETACH\t%s_detach\n", name);
152
fprintf (src, "#define DRIVER_TYPE\tDRV_%s\n", conf->bus);
154
if (conf->power_manage)
156
fprintf (src, "#define DRIVER_POWER\t%s_power\n", name);
157
fprintf (src, "#define OSS_POWER_MANAGE\n");
160
if (conf->suspend_resume)
162
fprintf (src, "#define DRIVER_SUSPEND\t%s_suspend\n", name);
163
fprintf (src, "#define DRIVER_RESUME\t%s_resume\n", name);
164
fprintf (src, "#define OSS_SUSPEND_RESUME\n");
169
fprintf (src, "extern int DRIVER_ATTACH(oss_device_t *ossdev);\n");
170
fprintf (src, "extern int DRIVER_DETACH(oss_device_t *ossdev);\n");
171
fprintf (src, "extern int DRIVER_POWER(oss_device_t *ossdev, int component, int level);\n");