📄 probe_check.c
字号:
static char sccsid[] = "@(#)probe_check.c 1.1 7/30/92 Sun Microsystems, Inc.";#include <stdio.h>#include <errno.h>#ifdef SVR4#include <string.h>#else SVR4#include <strings.h>#endif SVR4#include <kvm.h>#include <nlist.h>#include <fcntl.h>#include <sys/types.h>#include <sys/conf.h>#ifndef SVR4#include <sys/dir.h>#endif SVR4#include <sys/param.h>#include <sys/file.h>#include <sys/stat.h>#include <sys/buf.h>#include <sys/vmmac.h>#ifdef SVR4#include <sys/cpu.h>#include <sys/param.h>#include <vm/anon.h>#include <sys/dkio.h>#ifndef SVR4#include <sys/screg.h>#include <sys/scsi.h>#endif SVR4#include <sys/sireg.h>#else SVR4#include <machine/mmu.h>#include <machine/cpu.h>#include <machine/param.h>#include <machine/pte.h>#include <vm/anon.h>#include <sun/dkio.h>#include <sundev/mbvar.h>#include <sundev/screg.h>#include <sundev/sireg.h>#include <sundev/scsi.h>#include "openprom.h"#include "prestoioctl.h"#endif SVR4#include "probe.h"#include "../../lib/include/probe_sundiag.h"#include "sdrtns.h"#include "../../lib/include/libonline.h"extern struct mb_device *mbdinit; static kvm_t *mem;extern char *get_cpuname();extern int get_physmem(), get_vmem();#ifdef sun3extern int get_fpp(), get_fpu();#endif#ifdef sun4extern int get_fpa();#endifextern void get_scsi_names(), get_devices();extern void get_drivers();struct found_dev found[MAXDEVS];int devno = 0;char tmp_devdir[NAMELEN];char buff[200];char *tmpname="/tmp/sundiag.XXXXXX";extern char *mktemp();void save_mem(), save_dev();static void save_tape_dev(), save_disk_dev();void check_dev_files();#ifdef sun386#include <signal.h>#include <setjmp.h>jmp_buf error_buf;#endif/* * check_dev_files(makedevs, fpa_status) - checks the device files, * or otherwise determines that the device is valid, and then saves the info * for all of the devices in mbdinit which are "alive" - note that "alive" * is not terribly meaningful for SCSI disks and tapes, but otherwise valid */voidcheck_dev_files(makedevs, fpa_exist, dev_name) int makedevs; int fpa_exist; /* LINT MESSAGE */ char *dev_name;{ struct mb_devinfo *mdc; struct mb_device *md; struct mb_driver *mdr; int k, amt, cname, status, type, result, mem_fd, processors_mask; char *devicename; short t_type; unsigned arch_code; func_name = "check_dev_files"; TRACE_IN /* create tmp device directory */ buff[0] = '\0'; mktemp(tmpname);#ifndef SVR4 sprintf(buff,"mkdir %s;cp /dev/MAKEDEV %s;", tmpname, tmpname);#else SVR4 sprintf(buff,"mkdir %s;", tmpname);#endif SVR4 system(buff); strcpy(tmp_devdir, tmpname); /* copy tmp filename into global variable */ arch_code = sun_arch(); if (arch_code != ARCH4) /* if OpenBoot Prom type CPU's */ { if (arch_code != ARCH4C) { /* if MP machines */ processors_mask = get_processors_mask(); if ((k=get_number_processors(processors_mask)) > 1) save_dev(MP4, k, 0); } for (mdc = (struct mb_devinfo *)&mbdinfo[1], k = 0; k < numdev; k++, mdc++) { if ((dev_name !=(char *)NULL) && strcmp(mdc->info.devi_name, dev_name)) continue; /* look for the specific device */ if (!mdc->info.devi_driver) /* this is the same as alive */ continue; send_message (0, VERBOSE, "device %s unit %d", mdc->info.devi_name, mdc->info.devi_unit); devicename = mdc->info.devi_name; if (strncmp(devicename, "SUNW,", 5) == 0) devicename += 5; /* skip the "SUNW," */ /* SPARCstation dumb color frame buffer */ if (strcmp(devicename, CGTHREE) == 0) { if (check_cgthree_dev(makedevs, &type, mdc->info.devi_unit)) save_dev(CGTHREE, mdc->info.devi_unit, type); continue; } /* prism type frame buffer */ if (strcmp(devicename, CGFOUR) == 0) { if (check_cgfour_dev(makedevs, &type, mdc->info.devi_unit)) save_dev(CGFOUR, mdc->info.devi_unit, type); continue; } /* lego frame buffer */ if (strcmp(devicename, CGSIX) == 0) { if (check_cgsix_dev(makedevs, &type, mdc->info.devi_unit)) save_dev(CGSIX, mdc->info.devi_unit, type); continue; } /* egret graghic accelerator */ if (strcmp(devicename, CGTWELVE) == 0) { if (check_cgtwelve_dev(makedevs, &type, mdc->info.devi_unit)) save_dev(CGTWELVE, mdc->info.devi_unit, type); continue; } /* hawk2 graghic tower */ if (strcmp(devicename, GT) == 0) { if (check_cgtwelve_dev(makedevs, &type, mdc->info.devi_unit)) save_dev(GT, mdc->info.devi_unit, type); continue; } /* ethernet */ if (strcmp(devicename, IE) == 0) { if ((check_net(IE, mdc->info.devi_unit)) == NETUP) save_dev(IE, mdc->info.devi_unit, NETUP); continue; } /* lance */ if ((strcmp(devicename, LE) == 0) && (strcmp(devicename, "lebuffer") != 0) ) { if ((check_net(LE, mdc->info.devi_unit)) == NETUP) save_dev(LE, mdc->info.devi_unit, NETUP); continue; } /* scsi disk */ if (strcmp(devicename, SD) == 0) { if ((check_disk_dev(makedevs, SD, mdc->info.devi_unit, &amt,&cname)) == DISKOK) save_disk_dev(SD, mdc->info.devi_unit, amt, DISKOK, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, cname); continue; } /* floppy disk (Campus 2) */ if (arch_code != ARCH4C && strcmp(devicename, FDTWO) == 0) { if ((result=check_disk_dev(makedevs, FD, mdc->info.devi_unit, &amt,&cname)) != DISKPROB) save_disk_dev(FD, mdc->info.devi_unit, amt, result, "None", -1, cname); continue; } /* floppy disk */ if (strcmp(devicename, FD) == 0) { if ((result=check_disk_dev(makedevs, FD, mdc->info.devi_unit, &amt,&cname)) != DISKPROB) save_disk_dev(FD, mdc->info.devi_unit, amt, result, "None", -1, cname); continue; } /* CD ROM */ if (strcmp(devicename, CDROM) == 0) { if ((result=check_cdrom_dev(makedevs, CDROM, mdc->info.devi_unit, &amt, &cname)) != DISKPROB) save_disk_dev(CDROM, mdc->info.devi_unit, amt, result, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, cname); continue; } /* scsi tape */ if (strcmp(devicename, ST) == 0) { if ((status = check_st_dev(makedevs, mdc->info.devi_unit, &t_type))) save_tape_dev(ST, mdc->info.devi_unit, status, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, t_type); continue; } /* parallel port */ if (strcmp(devicename, PP) == 0) { if (check_printer_dev(makedevs, mdc->info.devi_unit)) save_dev(PP, mdc->info.devi_unit, 0); continue; } /* audio port */ if (strcmp(devicename, AUDIO) == 0) { if (check_audio_dev(0, mdc->info.devi_unit, &t_type)) save_dev(AUDIO, mdc->info.devi_unit, t_type); continue; } /* dbri port */ if (strncmp(devicename, DBRI, 4) == 0) { if (check_audbri_dev(0, mdc->info.devi_unit, &t_type)) save_dev(AUDIO, mdc->info.devi_unit, t_type); continue; } /* serial port */ if (strcmp(devicename, ZS) == 0) { if (check_sp_dev(makedevs, mdc->info.devi_unit)) save_dev(ZS, mdc->info.devi_unit, 0); continue; } if (strcmp(devicename, ZEBRA1) == 0) { save_dev(ZEBRA1, mdc->info.devi_unit, 0); continue; } /* zebra2 lpvi (serial video port -- for image printing) */ if (strcmp(devicename, ZEBRA2) == 0) { save_dev(ZEBRA2, mdc->info.devi_unit, 0); continue; } /* snapshot vfc (video frame capture -- taking a frame from a camera)*/ if (strcmp(devicename, VFC) == 0) { save_dev(VFC, mdc->info.devi_unit, 0); continue; } /* sun2/3/4 black and white monocrome */ if (strcmp(devicename, BWTWO) == 0) { if (check_bwtwo_dev(makedevs, &type, mdc->info.devi_unit)) save_dev(BWTWO, mdc->info.devi_unit, type); continue; } /* fddi device */ if (strcmp(devicename, FDDI) == 0) { if ((check_net(FDDI, mdc->info.devi_unit)) == NETUP) save_dev(FDDI, mdc->info.devi_unit, NETUP); continue; } /* token ring */ if (strcmp(devicename, TRNET) == 0) { if ((check_net(TRNET, mdc->info.devi_unit)) == NETUP) save_dev(TRNET, mdc->info.devi_unit, NETUP); continue; } /* OMNI (Interface's Network Coprocessor) ethernet */ if (strcmp(devicename, OMNI_NET) == 0) { if ((check_net(OMNI_NET, mdc->info.devi_unit)) == NETUP) save_dev(OMNI_NET, mdc->info.devi_unit, NETUP); continue; } /* SPIF serial parallel Interface port */ if (strcmp(devicename, SPIF) == 0) { save_dev(SPIF, mdc->info.devi_unit, 1); if (check_spif_dev(makedevs, mdc->info.devi_unit)) continue; } /* hss high speed port (VME bus) */ if (strcmp(devicename, HSS) == 0) { if (check_hss_dev(makedevs, mdc->info.devi_unit)) save_dev(HSS, mdc->info.devi_unit, 0); continue; } /* SBus high speed port */ if (strcmp(devicename, HSI) == 0) { if (check_hss_dev(makedevs, mdc->info.devi_unit)) save_dev(HSI, mdc->info.devi_unit, 0); continue; } if (strcmp(devicename, XD) == 0) { if ((check_disk_dev(makedevs, XD,mdc->info.devi_unit, &amt, &cname)) == DISKOK) save_disk_dev(XD, mdc->info.devi_unit, amt, DISKOK, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, cname); continue; } if (strcmp(devicename, XT) == 0) { if ((status = check_mt_dev(makedevs, XT, mdc->info.devi_unit, &t_type)) != 0) save_tape_dev(XT, mdc->info.devi_unit, status, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, t_type); continue; } if (strcmp(devicename, XY) == 0) { if ((check_disk_dev(makedevs, XY,mdc->info.devi_unit, &amt, &cname)) == DISKOK) save_disk_dev(XY, mdc->info.devi_unit, amt, DISKOK, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, cname); continue; } if (strcmp(devicename, IP) == 0) { if ((check_disk_dev(makedevs, IP,mdc->info.devi_unit, &amt, &cname)) == DISKOK) save_disk_dev(IP, mdc->info.devi_unit, amt, DISKOK, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, cname); continue; } if (strcmp(devicename, ID) == 0) { if ((check_disk_dev(makedevs, ID,mdc->info.devi_unit, &amt, &cname)) == DISKOK) save_disk_dev(ID, mdc->info.devi_unit, amt, DISKOK, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, cname); continue; } if (strcmp(devicename, MCP) == 0) { if ((status = check_mcp_dev(makedevs,mdc->info.devi_unit)) != 0) save_dev(MCP, mdc->info.devi_unit, status); continue; } if (strcmp(devicename, MT) == 0) { if ((status = check_mt_dev(makedevs, MT, mdc->info.devi_unit, &t_type)) != 0) save_tape_dev(MT, mdc->info.devi_unit, status, mdc->info.devi_parent->devi_name, mdc->info.devi_parent->devi_unit, t_type); continue; } if (strcmp(devicename, MTI) == 0) { if (check_mti_dev(makedevs, mdc->info.devi_unit)) save_dev(MTI, mdc->info.devi_unit, 0); continue; } if (strcmp(devicename, TAAC) == 0) { if (check_taac_dev(makedevs, &type, mdc->info.devi_unit)) save_dev(TAAC, mdc->info.devi_unit, 0); continue; } /* Sbus prestoserve */ if (strcmp(devicename, PR) == 0) { if (check_presto_dev(makedevs)) save_mem(PR, get_presto_mem()); continue; } } } else /* if not OpenBoot Prom type CPU's */ { for (md=mbdinit; mdr=md->md_driver; md++) { if ((dev_name != (char *)NULL) && strcmp(mdr->mdr_dname, dev_name)) continue; /* look for the specific device */ if (!md->md_alive) continue; if (mdr->mdr_dname == NULL) continue; /* just in case */ send_message(0, VERBOSE, "device %s%d attached", mdr->mdr_dname, md->md_unit); if (strcmp(mdr->mdr_dname, BWTWO) == 0) { if (check_bwtwo_dev(makedevs, &type, md->md_unit)) save_dev(BWTWO, md->md_unit, type); continue; } if (strcmp(mdr->mdr_dname, CGONE) == 0) { if (check_cgone_dev(makedevs, &type, md->md_unit)) save_dev(CGONE, md->md_unit, type); continue; } /* cg2, cg3, cg5 */ if (strcmp(mdr->mdr_dname, CGTWO) == 0) { if (check_cgtwo_dev(makedevs, &type, md->md_unit)) save_dev(CGTWO, md->md_unit, type); continue; } /* sun-386i frame buffer */ if (strcmp(mdr->mdr_dname, CGTHREE) == 0) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -