diff options
author | Thomas Bushnell <thomas@gnu.org> | 1997-02-25 21:28:37 +0000 |
---|---|---|
committer | Thomas Bushnell <thomas@gnu.org> | 1997-02-25 21:28:37 +0000 |
commit | f07a4c844da9f0ecae5bbee1ab94be56505f26f7 (patch) | |
tree | 12b07c7e578fc1a5f53dbfde2632408491ff2a70 /chips/screen_switch.c | |
download | gnumach-f07a4c844da9f0ecae5bbee1ab94be56505f26f7.tar.gz gnumach-f07a4c844da9f0ecae5bbee1ab94be56505f26f7.tar.bz2 gnumach-f07a4c844da9f0ecae5bbee1ab94be56505f26f7.zip |
Initial source
Diffstat (limited to 'chips/screen_switch.c')
-rw-r--r-- | chips/screen_switch.c | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/chips/screen_switch.c b/chips/screen_switch.c new file mode 100644 index 00000000..e216a534 --- /dev/null +++ b/chips/screen_switch.c @@ -0,0 +1,154 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University + * All Rights Reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" + * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR + * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +/* + * File: screen_switch.c + * Author: Alessandro Forin, Carnegie Mellon University + * Date: 9/90 + * + * Autoconfiguration code for the Generic Screen Driver. + */ + +#include <platforms.h> + +#if defined(DECSTATION) || defined(FLAMINGO) +#include <fb.h> +#include <gx.h> +#include <cfb.h> +#include <mfb.h> +#include <xcfb.h> +#include <sfb.h> +#endif + +#ifdef VAXSTATION +#define NGX 0 +#define NCFB 0 +#define NXCFB 0 +#endif + +#include <chips/screen_switch.h> + +/* When nothing needed */ +int screen_noop() +{} + +/* + * Vector of graphic interface drivers to probe. + * Zero terminate this list. + */ + + +#if NGX > 0 +extern int gq_probe(), gq_cold_init(); +extern unsigned int gq_mem_need(); + +extern int ga_probe(), ga_cold_init(); +extern unsigned int ga_mem_need(); +#endif /* NGX > 0 */ + +#if NCFB > 0 +extern int cfb_probe(), cfb_cold_init(); +extern unsigned int pm_mem_need(); +#endif /* NCFB > 0 */ + +#if NMFB > 0 +extern int fb_probe(), fb_cold_init(); +extern unsigned int pm_mem_need(); +#endif /* NMFB > 0 */ + +#if NXCFB > 0 +extern int xcfb_probe(), xcfb_cold_init(); +extern unsigned int pm_mem_need(); +#endif /* NXCFB > 0 */ + +#if NSFB > 0 +extern int sfb_probe(), sfb_cold_init(); +extern unsigned int pm_mem_need(); +#endif /* NSFB > 0 */ + +#if NFB > 0 +extern int pm_probe(), pm_cold_init(); +extern unsigned int pm_mem_need(); +#endif /* NFB > 0 */ + +struct screen_probe_vector screen_probe_vector[] = { + +#if NGX > 0 + gq_probe, gq_mem_need, gq_cold_init, /* 3max 3D color option */ + ga_probe, ga_mem_need, ga_cold_init, /* 3max 2D color option */ +#endif /* NGX > 0 */ + +#if NSFB > 0 + sfb_probe, pm_mem_need, sfb_cold_init, /* Smart frame buffer */ +#endif /* NSFB > 0 */ + +#if NMFB > 0 + fb_probe, pm_mem_need, fb_cold_init, /* 3max/3min 1D(?) mono option */ +#endif /* NMFB > 0 */ + +#if NCFB > 0 + cfb_probe, pm_mem_need, cfb_cold_init, /* 3max 1D(?) color option */ +#endif /* NCFB > 0 */ + +#if NXCFB > 0 + xcfb_probe, pm_mem_need, xcfb_cold_init,/* MAXine frame buffer */ +#endif /* NXCFB > 0 */ + +#if NFB > 0 + pm_probe, pm_mem_need, pm_cold_init, /* "pm" mono/color (pmax) */ +#endif + 0, +}; + +char *screen_data; /* opaque */ + +int screen_find() +{ + struct screen_probe_vector *p = screen_probe_vector; + for (;p->probe; p++) + if ((*p->probe)()) { + (*p->setup)(0/*XXX*/, screen_data); + return 1; + } + return 0; +} + +unsigned int +screen_memory_alloc(avail) + char *avail; +{ + struct screen_probe_vector *p = screen_probe_vector; + int size; + for (; p->probe; p++) + if ((*p->probe) ()) { + screen_data = avail; + size = (*p->alloc) (); + bzero(screen_data, size); + return size; + } + return 0; + +} + |