⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 probe_fbs.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef lintstatic  char sccsid[] = "@(#)probe_fbs.c 1.1 92/07/30 Copyright Sun Micro";#endif/* * Copyright (c) 1988 by Sun Microsystems, Inc. */#include <stdio.h>#include <errno.h>#include <signal.h>#include <setjmp.h>#include <sys/types.h>#ifndef SVR4#include <sys/dir.h>#endif SVR4#include <sys/file.h>#include <sys/stat.h>#include <sys/mman.h>#include <sys/ioctl.h>#ifdef SVR4#include <sys/fbio.h>#else SVR4#include <sun/fbio.h>#endif SVR4#ifndef SVR4#include <pixrect/pixrect.h>#include <pixrect/gp1reg.h>#include <pixrect/gp1var.h>#endif SVR4#include "probe.h"#include "../../lib/include/probe_sundiag.h"#include "fb_strings.h"#include "sdrtns.h"		/* sundiag standard header */	#ifndef SVR4extern char *sprintf();#endif SVR4extern char *valloc();extern caddr_t mmap();#define SH_MEM_BASE_ADDR        0x400#define GP2_BASE                0x240000        /* base address of gp2 */static int Map_bds();static void test_address();#ifndef SVR4bus_test_error();#endif SVR4static int check_fb(), fb_status();/*  * static int isgp(); */int gptype = 0;jmp_buf(sjbuf);/* * check_bwone(makedevs) - checks Sun-1 black and white * frame buffer device file (see bwone(4s) and MAKEDEV) */check_bwone_dev(makedevs, status, unit)    int makedevs;    int *status;    int unit;{    char name[22];    func_name = "check_bwone_dev";    TRACE_IN    sprintf(name, "/dev/bwone%d", unit);    if (check_dev(makedevs, name, character, 26, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);	}    TRACE_OUT    return(0);}/* * check_bwtwo_dev(makedevs) - checks Sun-3/Sun-2 black and white * frame buffer device file (see bwtwo(4s) and MAKEDEV) */check_bwtwo_dev(makedevs, status, unit)    int makedevs;    int *status;    int unit;{    char name[22];    func_name = "check_bwtwo_dev";    TRACE_IN    sprintf(name, "/dev/bwtwo%d", unit);    if (check_dev(makedevs, name, character, 27, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);   	}    TRACE_OUT    return(0);}/* * check_cgone_dev(makedevs) - checks Sun-1 color graphics * interface device file (see cgone(4s) and MAKEDEV) */check_cgone_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_cgone_dev";    TRACE_IN    sprintf(name, "/dev/cgone%d", unit);    if (check_dev(makedevs, name, character, 14, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);	}    TRACE_OUT    return(0);}/* * check_cgtwo_dev(makedevs) - checks Sun-3/Sun-2 color graphics * interface device file (see cgtwo(4s) and MAKEDEV) */check_cgtwo_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_cgtwo_dev";    TRACE_IN    sprintf(name, "/dev/cgtwo%d", unit);    if (check_dev(makedevs, name, character, 31, unit, "0666", no))	if ((*status = check_fb(name)) != -1) 	{	    TRACE_OUT            return(1);	}    TRACE_OUT    return(0);} /* * check_cgthree_dev(makedevs) - checks color graphics * interface device file (see MAKEDEV) */check_cgthree_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_cgthree_dev";    TRACE_IN    sprintf(name, "/dev/cgthree%d", unit);    if (check_dev(makedevs, name, character, 55, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);	}    TRACE_OUT    return(0);}/* * check_cgfour_dev(makedevs) - checks Sun-3 color graphics * interface device file (see cgfour(4s) and MAKEDEV) */check_cgfour_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_cgfour_dev";    TRACE_IN    sprintf(name, "/dev/cgfour%d", unit);    if (check_dev(makedevs, name, character, 39, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);	}	    TRACE_OUT    return(0);}/* * check_cgfive_dev(makedevs) - checks Road Racer graphics * interface device file (see MAKEDEV) */check_cgfive_dev(makedevs, status, unit)    int makedevs;    int *status;    int unit;{    char name[22];    func_name = "check_cgfive_dev";    TRACE_IN    sprintf(name, "/dev/cgfive%d", unit);    if (check_dev(makedevs, name, character, 58, unit, "0666", no))    if ((*status = check_fb(name)) != -1)    {	    TRACE_OUT            return(1);    }    TRACE_OUT    return(0);}/* * check_cgsix_dev(makedevs) - checks lego color graphics * interface device file (see MAKEDEV) */check_cgsix_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_cgsix_dev";    TRACE_IN    sprintf(name, "/dev/cgsix%d", unit);    if (check_dev(makedevs, name, character, 67, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);	}    TRACE_OUT    return(0);}/* * check_cgeight_dev(makedevs) - checks color graphics * interface device file (see MAKEDEV) */check_cgeight_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_cgeight_dev";    TRACE_IN    sprintf(name, "/dev/cgeight%d", unit);#ifndef sun386	    if (check_dev(makedevs, name, character, 64, unit, "0666", no))#else    if (check_dev(makedevs, name, character, 63, unit, "0666", no))#endif	if ((*status = check_fb(name)) != -1) 	{	    TRACE_OUT            return(1);	}    TRACE_OUT    return(0);}/* * check_cgnine_dev(makedevs) - checks crane color graphics * interface device file (see MAKEDEV) */check_cgnine_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_cgnine_dev";    TRACE_IN    sprintf(name, "/dev/cgnine%d", unit);    if (check_dev(makedevs, name, character, 68, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);	}    TRACE_OUT    return(0);}/* * check_tvone_dev(makedevs) - checks flamingo * interface device file (see MAKEDEV) */check_tvone_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_tvone_dev";    TRACE_IN    sprintf(name, "/dev/tvone%d", unit);    if (check_dev(makedevs, name, character, 100, unit, "0666", no))	if ((*status = check_fb(name)) != -1)	{	    TRACE_OUT            return(1);    	}    TRACE_OUT    return(0);}#ifndef SVR4#define GPONE_DEVS      4 /* * check_gpone_dev(makedevs) - checks Sun-3/Sun-2 graphics processor * device file (see des(4s) and MAKEDEV) */check_gpone_dev(makedevs)    int makedevs;{/* *    struct pixrect *gppr; *    char *perrmsg; *    char buf[BUFSIZ-1]; */    int fminor, fd;    char *name;    u_long gp2_base=0;     func_name = "check_gpone_dev";    TRACE_IN    for (fminor = 0; fminor < GPONE_DEVS; fminor++) {	switch (fminor) {	case 0:	    name = "/dev/gpone0a";	    break;	case 1:	    name = "/dev/gpone0b";	    break;	case 2:	    name = "/dev/gpone0c";	    break;	case 3:	    name = "/dev/gpone0d";	    break;	}        if ((check_dev(makedevs, name, character, 32, fminor,            "0666", no)) == 0)	{	    TRACE_OUT            return(0);	}    }    if (Map_bds(&fd, &gp2_base))        test_address(&fd, &gp2_base);     TRACE_OUT    return(gptype);}/* 4.0 compatibility */#ifndef MAP_FIXED#define MAP_FIXED       0#endif/* * from gp2_probe.c, in gp2test */static intMap_bds(fd, gp2_base)    int *fd;    u_long *gp2_base;{    caddr_t addr;    int len = GP2_SIZE;    int base = GP2_BASE;    char *perrmsg;    char buf[BUFSIZ-1];    func_name = "Map_bds";    TRACE_IN    if ((*fd = open("/dev/vme24d32", O_RDWR)) < 0) {      	send_message(0, ERROR,"cannot open /dev/vme24d32: %s",errmsg(errno)); 	TRACE_OUT      	return(0);    }     addr = valloc((unsigned)len);    if ((mmap(addr, len, PROT_READ | PROT_WRITE,        MAP_SHARED | MAP_FIXED, *fd, base)) < 0) {      	send_message(0, ERROR,"mmap error for /dev/vme24d32: %s",errmsg(errno));	TRACE_OUT      	return(0);    }    *gp2_base = (u_long)addr;    TRACE_OUT    return(1);}/* * from gp2_probe.c, in gp2test */static voidtest_address(fd, gp2_base)    int *fd;    u_long *gp2_base;{    unsigned long *addr_ptr, data = 0;    int osigs;     func_name = "test_address";    TRACE_IN    osigs = sigsetmask(0);    (void) signal(SIGBUS, bus_test_error);    (void) signal(SIGSEGV, bus_test_error);    setjmp(sjbuf);    if (gptype != 1) {        addr_ptr = (unsigned long *)(*gp2_base + SH_MEM_BASE_ADDR);       /* here we test for a bus error */        data = *addr_ptr;                            if (data != 0)	    send_message(0, DEBUG, "Probe data = %ld", data);        gptype = 2;    }    (void) sigsetmask(osigs);    (void) close(*fd);    TRACE_OUT}#endif SVR4bus_test_error(){#ifdef SVR4    int val = 0;#endif SVR4    func_name = "bus_test_error";    TRACE_IN    send_message (0, DEBUG, "at bus_test_error()");    gptype = 1;#ifdef SVR4    longjmp(sjbuf, val);#else SVR4    longjmp(sjbuf);#endif SVR4    TRACE_OUT}/* * from David DiGiacomo * check for GP/GP2 */ /* * static int * isgp(pr) *     Pixrect *pr; * { *     short *id; *  *     if (pr->pr_ops->pro_rop != gp1_rop) 	   *//* not a GP *//* * *         return(0); *  *     if (!(id = (short *) valloc((unsigned) getpagesize())) || *         mmap((caddr_t) id, getpagesize(),  *         PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, *         gp1_d(pr)->ioctl_fd, 0) == (caddr_t) -1) *//* something is wrong *//* *         return(-1); *  *     if ((*id & GP1_ID_MASK) == GP1_ID_VALUE)      *//* GP or GP+ *//* *         return(1); *  *     if ((*id & GP2_ID_MASK) == GP2_ID_VALUE) 	   *//* GP2 *//* *         return(2); *  *     return(-1);   				   *//* what is it? *//* * } *//* * from fbio(4s) */static intcheck_fb(name)    char *name;{    int fd;    struct fbtype fbt;    char *perrmsg, buf[BUFSIZ-1];    func_name = "check_fb";    TRACE_IN#if	0		/* -JCH- it will cause Bus Error */    if ((fd = open(name, O_RDWR)) < 0) {        send_message(0, ERROR, "%s open: %s", name, errmsg(errno)); 	TRACE_OUT	return(-1);    }    if (ioctl(fd, FBIOGTYPE, (char *)&fbt) < 0) {        send_message(0, ERROR, "%s FBIOGTYPE ioctl: %s", name,errmsg(errno)); 	TRACE_OUT	return(-1);    }    (void) close(fd);    TRACE_OUT    return(fb_status(&fbt));#endif    TRACE_OUT    return(1);		/* always */}/* * same as tape_status in probe_tapes.c */static intfb_status(fbt)    struct fbtype *fbt;{    char buf[BUFSIZ-1];    struct fb_desc *fb;    func_name = "fb_status";    TRACE_IN    for (fb = frame_buffs; (fb->fb_type < FBTYPE_LASTPLUSONE); fb++)	if (fb->fb_type == fbt->fb_type)	    break;    if (fb->fb_type == 0) {        send_message(0, ERROR, "unknown frame buffer type (%d)", fb->fb_type);	TRACE_OUT        return(-1);    }    if ((fb->fb_type >= 0) &&	(fb->fb_type < FBTYPE_LASTPLUSONE))	send_message (0, DEBUG, "%s frame buffer type", fb->fb_name);    TRACE_OUT    return(fbt->fb_type);}/* * check_taac_dev(makedevs) - checks the taac graphics * device file (see taac(4s) and MAKEDEV) */check_taac_dev(makedevs, status, unit)    int makedevs;    int *status;    int	unit;{    char name[22];    func_name = "check_taac_dev";    TRACE_IN    sprintf(name, "/dev/taac%d", unit);    if (check_dev(makedevs, name, character, 62, unit, "0666", no))    {	TRACE_OUT        return(1);    }    TRACE_OUT    return(0);}/* * check_cgtwelve_dev(makedevs, status, unit) - checks the Egret graphics * acceleration device.  Egret is a combination of cg9 and gp2 functionally. * */check_cgtwelve_dev(makedevs, status, unit)    int makedevs;    int *status;    int unit;{    char name[22];      func_name = "check_cgtwelve_dev";    TRACE_IN    sprintf(name, "/dev/cgtwelve%d", unit);    if (check_dev(makedevs, name, character, 102, unit, "0666", no))    {	TRACE_OUT	return(1);    }    TRACE_OUT    return(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -