[6960] in Athena Bugs

home help back first fref pref prev next nref lref last post

machtype changes

daemon@ATHENA.MIT.EDU (daemon@ATHENA.MIT.EDU)
Fri Jan 25 23:30:24 1991

To: bugs@ATHENA.MIT.EDU
Date: Fri, 25 Jan 91 23:29:42 EST
From: John Carr <jfc@ATHENA.MIT.EDU>


Changes:
	AIX 1.2 support

	only open memory once if several routines need it

	printf with no formatting changes to puts

	more descriptive names when verbose is on

	if the program can read /dev/kUmem, print VAX 3100 model

	don't exit if one check fails, since others may not

*** /source/athena/bin.athena/machtype.c	Wed Oct 31 09:52:32 1990
--- machtype.c	Fri Jan 25 23:24:35 1991
***************
*** 9,12 ****
--- 9,13 ----
  
  #include <stdio.h>
+ #include <string.h>
  #include <nlist.h>
  #include <sys/param.h>
***************
*** 13,17 ****
--- 14,25 ----
  #include <sys/types.h>
  #include <sys/file.h>
+ #ifndef _AIX
  #include <machine/cpu.h>
+ #endif
+ #ifdef vax
+ #define	VAXSTAR
+ #include <machine/pte.h>
+ #include <machineio/ubareg.h>	/* For VAX 3100 model */
+ #endif
  #if defined(mips) && defined(ultrix)
  #include <machine/hwconf.h>
***************
*** 39,43 ****
--- 47,63 ----
  #endif
  
+ 
+ #if defined(i386) && defined(_AIX)
+ #include <sys/machinfo.h>
+ #define NL_NF(nl) ((nl).n_value == 0)
+ #else
+ #define NL_NF(nl) ((nl).n_type == 0)
+ #endif
+ 
+ #if !defined(_AIX)
  #define KERNEL "/vmunix"
+ #else
+ #define KERNEL "/unix"
+ #endif
  #define MEMORY "/dev/kmem"
  
***************
*** 76,79 ****
--- 96,101 ----
  #define X_sgdinfo 14
  	{ "_sgdinfo" },
+ #define	X_nexus 15
+ 	{ "_nexus" },
  #else
  #if defined(ibm032)
***************
*** 130,133 ****
--- 152,163 ----
  #endif
  #endif
+ #if defined(_AIX) && defined(i386)
+ #define	X_physmem 0
+ 	{ "physmem" },
+ #define	X_maxmem  1
+ 	{ "maxmem" },
+ #define	X_cpu     2
+ 	{ "mach_info" },
+ #endif
  	{ "" },
  };
***************
*** 176,205 ****
      if (cpuflg || dpyflg || raflg || memflg)
        {
  	if (nlist(kernel, nl) < 0) {
  	  fprintf(stderr, "can't get namelist\n");
! 	  exit(1);
  	}
  	if (cpuflg)
! 	  do_cpu(kernel, memory);
  	if (dpyflg)
! 	  do_dpy(kernel, memory);
  	if (raflg)
! 	  do_disk(kernel, memory);
  	if (memflg)
! 	  do_memory(kernel, memory);
        } else {
  #if defined(vax)
!       printf("vax\n");
  #else
  #if defined(ibm032)
!       printf("rt\n");
  #else
  #if defined(ultrix) && defined(mips)
!       printf("decmips\n");
  #else
!       printf("???\n");
  #endif
  #endif
  #endif
      }
      exit(0);
--- 206,244 ----
      if (cpuflg || dpyflg || raflg || memflg)
        {
+ 	int memfd;
  	if (nlist(kernel, nl) < 0) {
  	  fprintf(stderr, "can't get namelist\n");
! 	  exit(2);
  	}
+ 	if ((memfd = open (memory, O_RDONLY)) == -1) {
+ 	  perror ("machtype: can't open memory");
+ 	  exit(2);
+ 	}
  	if (cpuflg)
! 	  do_cpu(kernel, memfd);
  	if (dpyflg)
! 	  do_dpy(kernel, memfd);
  	if (raflg)
! 	  do_disk(kernel, memfd);
  	if (memflg)
! 	  do_memory(kernel, memfd);
        } else {
  #if defined(vax)
!       puts("vax");
  #else
  #if defined(ibm032)
!       puts("rt");
  #else
  #if defined(ultrix) && defined(mips)
!       puts("decmips");
  #else
! #if defined(i386) && defined(_AIX)
!       puts("ps2\n");
! #else
!       puts("???\n");
  #endif
  #endif
  #endif
+ #endif
      }
      exit(0);
***************
*** 216,236 ****
  
  
! do_cpu(kernel, memory)
! char *kernel, *memory;
! {
      int mf;
  #if defined(mips) && defined(ultrix)
      unsigned cpu;
  #else
!     int cpu, cpu_subtype;
  #endif    
!     if (nl[X_cpu].n_type == 0) {
  	fprintf(stderr, "cpu not found\n");
! 	exit(1);
      }
-     if ((mf = open(memory, 0)) < 0) {
- 	fprintf(stderr, "can't open memory\n");
- 	exit(1);
-     }
      lseek(mf, nl[X_cpu].n_value, L_SET);
      read(mf, &cpu, sizeof(cpu));
--- 255,276 ----
  
  
! do_cpu(kernel, mf)
! char *kernel;
  int mf;
+ {
+ #ifdef X_cpu
  #if defined(mips) && defined(ultrix)
      unsigned cpu;
  #else
! #if defined(i386) && defined(_AIX)
!     struct mach_info cpu;
! #else
!     int cpu;
  #endif
! #endif
!     if (NL_NF(nl[X_cpu])) {
  	fprintf(stderr, "cpu not found\n");
! 	exit(3);
      }
      lseek(mf, nl[X_cpu].n_value, L_SET);
      read(mf, &cpu, sizeof(cpu));
***************
*** 239,273 ****
      switch (cpu) {
      case VAX_780:
! 	printf("VAX780\n");
  	break;
      case VAX_750:
! 	printf("VAX750\n");
  	break;
      case VAX_730:
! 	printf("VAX730\n");
  	break;
      case VAX_8600:
! 	printf("VAX8600\n");
  	break;
      case VAX_8200:
! 	printf("VAX8200\n");
  	break;
      case VAX_630:
  	if (nl[X_cpu_subtype].n_type) {
  	    lseek(mf, nl[X_cpu_subtype].n_value, L_SET);
  	    read(mf, &cpu_subtype, sizeof(cpu_subtype));
  	    if(cpu_subtype == 4) {
! 		printf("VAXSTAR\n");
  		break;
! 	    } if(cpu_subtype != 1) {
! 		printf("???\n");
  		break;
  	    }
  	}
! 	printf("MVAX-II\n");
  	break;
  #ifdef VAX_650
      case VAX_650:
! 	printf("VAX650\n");
  	break;
  #endif
--- 279,316 ----
      switch (cpu) {
      case VAX_780:
! 	puts("VAX780");
  	break;
      case VAX_750:
! 	puts("VAX750");
  	break;
      case VAX_730:
! 	puts("VAX730");
  	break;
      case VAX_8600:
! 	puts("VAX8600");
  	break;
      case VAX_8200:
! 	puts("VAX8200");
  	break;
      case VAX_630:
  	if (nl[X_cpu_subtype].n_type) {
+ 	    int cpu_subtype;
  	    lseek(mf, nl[X_cpu_subtype].n_value, L_SET);
  	    read(mf, &cpu_subtype, sizeof(cpu_subtype));
  	    if(cpu_subtype == 4) {
! 		puts(verbose ? "Microvax 2000" : "VAXSTAR");
  		break;
! 	    } else if(cpu_subtype != 1) {
! 		puts(verbose ? "Unknown VAX 630" : "VAX???");
  		break;
  	    }
  	}
! 	puts(verbose ? "Microvax II" : "MVAX-II");
  	break;
  #ifdef VAX_650
      case VAX_650:
! 	/* There are 3 subtypes of VAX 650, which this program
! 	   does not distinguish. */
! 	puts(verbose ? "Microvax III" : "VAX650");
  	break;
  #endif
***************
*** 274,282 ****
  #ifdef VAX_420
      case VAX_420:
! 	printf("CVAXSTAR\n");
  	break;
  #endif
      default:
! 	printf("VAX???\n");
      }
  #else
--- 317,346 ----
  #ifdef VAX_420
      case VAX_420:
! 	if (verbose) {
! 	  switch (ka420model()) {
! 	  case -1:
! 	    puts("VAX 3100");
  	    break;
+ 	  case 0:
+ 	  case 1:
+ 	    puts("VAX 3100 model 38/48");
+ 	    break;
+ 	  case 2:
+ 	    puts("VAX 3100 model 30/40");
+ 	    break;
+ 	  case 3:
+ 	    puts("VAX 3100 (100 ns CPU)");
+ 	    break;
+ 	  }
+ 	} else {
+ 	  puts("CVAXSTAR");
+ 	}
+ 	break;
  #endif
      default:
! 	if(verbose)
! 		printf("Unknown VAX type %d\n", cpu);
! 	else
! 		puts("VAX???");
      }
  #else
***************
*** 288,308 ****
  	switch(cpu_model) {
  	case CPU_SGP:
! 	    printf("RTPC-SGP\n");
  	    break;
  	case CPU_ROMPC:
! 	    printf("RTPC-ROMPC\n");
  	    break;
  	case CPU_MOD135:
! 	    printf("RTPC-MOD135\n");
  	    break;
  	default:
! 	    printf("RTPC???\n");
  	}
          break;
      case CPU_ATR:
! 	printf("IBM-ATR\n");
  	break;
      default:
! 	printf("IBM???\n");
      }
  #else
--- 352,372 ----
  	switch(cpu_model) {
  	case CPU_SGP:
! 	    puts("RTPC-SGP");
  	    break;
  	case CPU_ROMPC:
! 	    puts("RTPC-ROMPC");
  	    break;
  	case CPU_MOD135:
! 	    puts("RTPC-MOD135");
  	    break;
  	default:
! 	    puts("RTPC???");
  	}
          break;
      case CPU_ATR:
! 	puts("IBM-ATR");
  	break;
      default:
! 	puts("IBM???");
      }
  #else
***************
*** 318,322 ****
  	  printf("KN01 rev %d\n", GETHRDREV(cpu));
  	else
! 	  printf("KN01\n");
  #ifdef ULTRIX_40
        else if(GETSYSTYPE(cpu) == ST_DS5400)  
--- 382,386 ----
  	  printf("KN01 rev %d\n", GETHRDREV(cpu));
  	else
! 	  puts("KN01");
  #ifdef ULTRIX_40
        else if(GETSYSTYPE(cpu) == ST_DS5400)  
***************
*** 324,328 ****
  	  printf("KN210 rev %d\n", GETHRDREV(cpu));
  	else
! 	  printf("KN210\n");
        else if(GETSYSTYPE(cpu) == ST_DS5000)  
  	if(verbose)
--- 388,392 ----
  	  printf("KN210 rev %d\n", GETHRDREV(cpu));
  	else
! 	  puts("KN210");
        else if(GETSYSTYPE(cpu) == ST_DS5000)  
  	if(verbose)
***************
*** 329,333 ****
  	  printf("KN02 rev %d\n", GETHRDREV(cpu));
  	else
! 	  printf("KN02\n");
        else if(GETSYSTYPE(cpu) == ST_DS5500)  
  	if(verbose)
--- 393,397 ----
  	  printf("KN02 rev %d\n", GETHRDREV(cpu));
  	else
! 	  puts("KN02");
        else if(GETSYSTYPE(cpu) == ST_DS5500)  
  	if(verbose)
***************
*** 334,338 ****
  	  printf("KN220 rev %d\n", GETHRDREV(cpu));
  	else
! 	  printf("KN220\n");
  #endif	/* ULTRIX_40 */
        else
--- 398,402 ----
  	  printf("KN220 rev %d\n", GETHRDREV(cpu));
  	else
! 	  puts("KN220");
  #endif	/* ULTRIX_40 */
        else
***************
*** 340,344 ****
  	  printf("R2000a??? type %02x.%02x\n",GETSYSTYPE(cpu),GETHRDREV(cpu));
  	else
! 	  printf("R2000a???\n");
      } else {
  #if defined(MIPSEL)
--- 404,408 ----
  	  printf("R2000a??? type %02x.%02x\n",GETSYSTYPE(cpu),GETHRDREV(cpu));
  	else
! 	  puts("R2000a???");
      } else {
  #if defined(MIPSEL)
***************
*** 346,369 ****
  	printf("MIPSEL??? type %d\n", GETCPUTYPE(cpu));
        else
! 	printf("MIPSEL???\n");
  #else
!       printf("mips???\n");
  #endif
      }
  #else
!     fprintf (stderr,
! 	     "Don't know how to determine CPU type for this machine.\n");
!     exit (1);
  #endif
  #endif
  #endif
      return;
  }
  
! 
! do_dpy(kernel, memory)
! char *kernel, *memory;
  {
      int mf;
  #ifdef vax
      caddr_t value;
--- 410,489 ----
  	printf("MIPSEL??? type %d\n", GETCPUTYPE(cpu));
        else
! 	puts("MIPSEL???");
  #else
!       puts("mips???");
  #endif
      }
  #else
! #if defined(i386) && defined(_AIX)
!       switch(cpu.mach_type) {
!     case PS2_50:
!       if(verbose)
! 	puts("PS/2 model 50");
!       else
! 	puts("PS2-50");
!       break;
!     case PS2_55:
!       if(verbose)
! 	puts("PS/2 model 55");
!       else
! 	puts("PS2-55");
!     case PS2_60:
!       if(verbose)
! 	puts("PS/2 model 60");
!       else
! 	puts("PS2-60");
!       break;
!     case PS2_70:
!       if(verbose)
! 	puts("PS/2 model 70");
!       else
! 	puts("PS2-70");
!       break;
!     case PS2_80:
!       if(verbose)
! 	puts("PS/2 model 80");
!       else
! 	puts("PS2-80");
!       break;
!     default:
!       if(verbose)
! 	printf("PS/2 unknown type %d\n", cpu.mach_type);
!       else
! 	puts("PS2-???\n");
!     }
  #endif
  #endif
  #endif
+ #endif
+ #else
+     fprintf (stderr,
+ 	     "Don't know how to determine CPU type for this machine.\n");
+ #endif
      return;
  }
  
! #ifdef vax
! int ka420model()
  {
+   unsigned long cacr;
+   int kUmf;
+   if (nl[X_nexus].n_type == 0)
+     return -1;
+   kUmf = open("/dev/kUmem", O_RDONLY);
+   if (kUmf == -1)
+     return -1;
+   lseek(kUmf, nl[X_nexus].n_value + (int)&((struct nb_regs *)0)->nb_cacr, L_SET);
+   if(read(kUmf, &cacr, sizeof(cacr)) != sizeof(cacr))
+     return -1;
+   close (kUmf);
+   return (cacr >> 6) & 3;
+ }
+ #endif
+ 
+ do_dpy(kernel, mf)
+ char *kernel;
  int mf;
+ {
  #ifdef vax
      caddr_t value;
***************
*** 374,378 ****
      char buf[32];
      struct screen_sw sw;
-     char *index();
  #else
  #if defined(ultrix) && defined(mips)
--- 494,497 ----
***************
*** 379,394 ****
      int value;
  #else
      fprintf (stderr,
  	     "Don't know how to determine display type for this machine.\n");
!     exit (1);
  #endif
  #endif
  #endif
  
-     if ((mf = open(memory, 0)) < 0) {
- 	fprintf(stderr, "can't open memory\n");
- 	exit(1);
-     }
- 
  #if defined(vax)
      if (nl[X_qvinfo].n_type != 0) {
--- 498,513 ----
      int value;
  #else
+ #if defined(_AIX) && defined(i386)
+     hft_dpy();
+     return;
+ #else
      fprintf (stderr,
  	     "Don't know how to determine display type for this machine.\n");
!     return;
  #endif
  #endif
  #endif
+ #endif
  
  #if defined(vax)
      if (nl[X_qvinfo].n_type != 0) {
***************
*** 396,400 ****
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  printf("QVSS\n");
      }
      if (nl[X_qdinfo].n_type != 0) {
--- 515,519 ----
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  puts("QVSS\n");
      }
      if (nl[X_qdinfo].n_type != 0) {
***************
*** 402,406 ****
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  printf("QDSS\n");
      }
      if (nl[X_smdinfo].n_type != 0) {
--- 521,525 ----
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  puts("QDSS\n");
      }
      if (nl[X_smdinfo].n_type != 0) {
***************
*** 408,412 ****
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  printf("SM\n");
      }
      if (nl[X_sgdinfo].n_type != 0) {
--- 527,531 ----
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  puts("SM\n");
      }
      if (nl[X_sgdinfo].n_type != 0) {
***************
*** 414,418 ****
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  printf("SG\n");
      }
      if (nl[X_vsdinfo].n_type != 0) {
--- 533,537 ----
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  puts("SG\n");
      }
      if (nl[X_vsdinfo].n_type != 0) {
***************
*** 420,424 ****
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  printf("VS100\n");
      }
      if (nl[X_plxinfo].n_type != 0) {
--- 539,543 ----
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  puts("VS100\n");
      }
      if (nl[X_plxinfo].n_type != 0) {
***************
*** 426,430 ****
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  printf("PLX\n");
      }
  #else
--- 545,552 ----
  	read(mf, &value, sizeof(value));
  	if (value)
! 	  if (verbose)
! 	    puts("parallax");
! 	  else
! 	    puts("PLX\n");
      }
  #else
***************
*** 432,436 ****
      if (nl[X_screen_sw].n_type == 0) {
  	fprintf(stderr, "can't find screen info\n");
! 	exit(1);
      }
      lseek(mf, nl[X_NSCREEN].n_value, L_SET);
--- 554,558 ----
      if (nl[X_screen_sw].n_type == 0) {
  	fprintf(stderr, "can't find screen info\n");
! 	return;
      }
      lseek(mf, nl[X_NSCREEN].n_value, L_SET);
***************
*** 448,452 ****
  	    if (!strcmp(buf, "monochrome"))
  	      continue;
! 	    printf("%s\n", buf);
  	}
      }
--- 570,574 ----
  	    if (!strcmp(buf, "monochrome"))
  	      continue;
! 	    puts(buf);
  	}
      }
***************
*** 455,459 ****
      if (nl[X_pmDev].n_type == 0) {
  	fprintf(stderr, "can't find console device id in kernel\n");
! 	exit(1);
      }
      lseek(mf, nl[X_pmDev].n_value, L_SET);
--- 577,581 ----
      if (nl[X_pmDev].n_type == 0) {
  	fprintf(stderr, "can't find console device id in kernel\n");
! 	return;
      }
      lseek(mf, nl[X_pmDev].n_value, L_SET);
***************
*** 463,467 ****
  	struct devget dev;
  
! 	printf("PM-");
  	/* XXX KLUDGE ALERT XXX */
  	/* opening /dev/xcons will get the right device on a DEVIOCGET */
--- 585,589 ----
  	struct devget dev;
  
! 	fputs("PM-", stdout);
  	/* XXX KLUDGE ALERT XXX */
  	/* opening /dev/xcons will get the right device on a DEVIOCGET */
***************
*** 474,480 ****
  #ifdef ULTRIX_40
  	    /* The dev.device info is only valid on units 0,1 */
! 	    printf("%s\n",dev.dev_name);
  #else
! 	    printf("%s\n",dev.device);
  #endif
  	} else {
--- 596,602 ----
  #ifdef ULTRIX_40
  	    /* The dev.device info is only valid on units 0,1 */
! 	    puts(dev.dev_name);
  #else
! 	    puts(dev.device);
  #endif
  	} else {
***************
*** 481,485 ****
  	    if (fd != -1)
  		(void) close(fd);
! 	    printf("???\n");
  	}
      }
--- 603,607 ----
  	    if (fd != -1)
  		(void) close(fd);
! 	    puts("???");
  	}
      }
***************
*** 487,491 ****
      fprintf (stderr,
  	     "Don't know how to determine display type for this machine.\n");
!     exit (1);
  #endif
  #endif
--- 609,613 ----
      fprintf (stderr,
  	     "Don't know how to determine display type for this machine.\n");
!     return;
  #endif
  #endif
***************
*** 504,519 ****
  } ra_info[4];
  
! do_disk(kernel, memory)
  char *kernel;
! char *memory;
  {
!     int mf, i, c;
  
-     if ((mf = open(memory, 0)) < 0) {
- 	fprintf(stderr, "can't open memory\n");
- 	exit(1);
-     }
      if (nl[X_ra_info].n_type == 0)
!       return(do_torek(kernel,memory,mf));
      lseek(mf, (long) nl[X_ra_info].n_value, L_SET);
      read(mf, ra_info, sizeof(ra_info));
--- 626,637 ----
  } ra_info[4];
  
! do_disk(kernel, mf)
  char *kernel;
! int mf;
  {
!     int i, c;
  
      if (nl[X_ra_info].n_type == 0)
!       return(do_torek(kernel,mf));
      lseek(mf, (long) nl[X_ra_info].n_value, L_SET);
      read(mf, ra_info, sizeof(ra_info));
***************
*** 600,608 ****
  #include <machineio/scsireg.h>
  
! do_disk(kernel, memory)
! char *kernel, *memory;
  {
!   int mf, i, pos;
!   char hdtypes[12][8];	/* 16 is arbitrary, just bigger than
  			   the size in machineio/hd.c */
    struct hdst { long _0; 
--- 718,727 ----
  #include <machineio/scsireg.h>
  
! do_disk(kernel, mf)
! char *kernel;
! int mf;
  {
!   int i, pos;
!   char hdtypes[12][8];	/* size is arbitrary, just bigger than
  			   the size in machineio/hd.c */
    struct hdst { long _0; 
***************
*** 631,638 ****
    struct iocc_device scsidinfo;
  #endif
-   if ((mf = open(memory, 0)) < 0) {
-       fprintf(stderr, "can't open memory\n");
-       exit(2);
-   }
    if(verbose) {
      if((pos = nl[X_hdst].n_value) == 0) {
--- 750,753 ----
***************
*** 731,735 ****
  	    } else {
  	      printf("sc%d: invalid (null) partition table.  %s\n",i,
! 		     msg == 0 ? "There might be a drive here,\nand there might not be.  Check on the floor under the machine." : "");
  	      msg = 1;
  	    }
--- 846,850 ----
  	    } else {
  	      printf("sc%d: invalid (null) partition table.  %s\n",i,
! 		     msg == 0 ? "There might be a drive here,\n\tand there might not be.  Check on the floor under the machine." : "");
  	      msg = 1;
  	    }
***************
*** 741,752 ****
  #else /* not rt */
  #if defined(DEC_SCSI)
! do_disk(kernel, memory)
! char *kernel, *memory;
! {
    int mf;
!   if ((mf = open(memory, 0)) < 0) {
!       fprintf(stderr, "can't open memory\n");
!       exit(2);
!   }
    do_scsi_disk(kernel,memory, mf);
  }
--- 856,863 ----
  #else /* not rt */
  #if defined(DEC_SCSI)
! do_disk(kernel, mf)
! char *kernel;
  int mf;
! {
    do_scsi_disk(kernel,memory, mf);
  }
***************
*** 753,759 ****
  #else 
  
! do_disk (kernel, memory) char *kernel, *memory; {
      fprintf (stderr, "Don't know how to read disk types for this machine.\n");
!     exit (1);
  }
  
--- 864,870 ----
  #else 
  
! do_disk (kernel, mf) char *kernel; int mf; {
      fprintf (stderr, "Don't know how to read disk types for this machine.\n");
!     return;
  }
  
***************
*** 763,770 ****
  
  #ifdef DEC_SCSI
- /* This function assumes there is only 1 scsi controller.  If there
-    are more, then repeat.  For pmax, increment the first read address
-    by 4 bytes.  For vax, increment the (only) read address by
-    sizeof (struct sz_softc). */
  #include <sys/time.h>
  #ifndef ULTRIX_40
--- 874,877 ----
***************
*** 776,781 ****
  #endif
  
! do_scsi_disk(kernel, memory, mf)
! char *kernel, *memory;
  int mf;
  {
--- 883,888 ----
  #endif
  
! do_scsi_disk(kernel, mf)
! char *kernel;
  int mf;
  {
***************
*** 797,801 ****
    for(ctl=0;ctl<=nscsi;ctl++)
      {
! #if !defined(vax) && !defined(ULTRIX_40)	/* mips indirects through a pointer */
        pos = base + 4 * ctl;
        lseek(mf, pos, L_SET);
--- 904,908 ----
    for(ctl=0;ctl<=nscsi;ctl++)
      {
! #if !defined(vax) && !defined(ULTRIX_40)	/* mips 3.1 indirects through a pointer */
        pos = base + 4 * ctl;
        lseek(mf, pos, L_SET);
***************
*** 833,845 ****
  
  #define MEG (1024*1024)
! do_memory (kernel, memory)
! char *kernel, *memory;
! 
  {
!   int mf, pos, mem;
!   if ((mf = open(memory, 0)) < 0) {
!       fprintf(stderr, "can't open memory\n");
!       exit(2);
!   }
    pos = nl[X_maxmem].n_value;
    if(pos == 0) {
--- 940,948 ----
  
  #define MEG (1024*1024)
! do_memory (kernel, mf)
! char *kernel;
! int mf;
  {
!   int pos, mem;
    pos = nl[X_maxmem].n_value;
    if(pos == 0) {
***************
*** 872,873 ****
--- 975,1046 ----
    return; 
  }
+ 
+ #if defined(i386) && defined(_AIX)
+ #include <sys/hft.h>
+ 
+ struct _hft_map { int id; char gen[8],dpy[8]; } hft_map[] = {
+   {0x11, "VGA","8503",},
+   {0x12, "VGA","8512",},
+   {0x13, "VGA","8513",},
+   {0x14, "VGA","8514",},
+   {0x15, "VGA","8507",},
+   {0x16, "VGA","8604",},
+   {0x18, "8514a","8503"},
+   {0x19, "8514a","8512"},
+   {0x1A, "8514a","8513"},
+   {0x1B, "8514a","8514"},
+   {0x1C, "8514a","8507"},
+   {0x1D, "8514a","8604"},
+   {0,0,0}};
+ 
+ typedef struct hftdid  {
+         char    hftDevID[4];
+         char    hftDevClass[4];
+ } hftDeviceID;
+ 
+ int hft_dpy()
+ {
+   int fd;
+   struct _hft_map *h;
+   hftDeviceID dev;
+   struct {
+     char    pad;
+     char    hf_esc;
+     char    hf_lbr;
+     char    hf_ex;
+     int     hf_len;
+     char    hf_typehi;
+     char    hf_typelo;
+     char    hf_sublen;
+     char    hf_subtype;
+     short	hf_numdev;
+     struct {
+       short	hf_idhi,hf_idlo;
+       short	hf_classhi,hf_classlo;
+     } hf_devices[4];
+   }  qDevIDResponse;
+ #define	HFWDCHARS(n)	(n)>>8&0xff, (n)&0xff
+ #define	FLWDCHARS(n)	(n)>>24&0xff,(n)>>16&0xff,(n)>>8&0xff,(n)&0xff
+ #define	VTD(n)	HFINTROESC, HFINTROLBR, HFINTROEX, FLWDCHARS(n)
+   struct hfqdevidc qdevidcmd =
+     { VTD(sizeof(struct hfqdevidc)-3), HFQDEVIDCH, HFQDEVIDCL };
+   struct hfquery q = {qdevidcmd.hf_intro, sizeof(qdevidcmd),
+ 			&qDevIDResponse, sizeof(qDevIDResponse) - 1};
+   qDevIDResponse.hf_len= sizeof( qDevIDResponse ) - 4;
+   fd = open("/dev/console", O_WRONLY);
+   ioctl(fd, HFQUERY, &q);
+   for(h = hft_map;h->id;h++)
+     if(h->id == qDevIDResponse.hf_devices[0].hf_idhi && 0xff)
+       if(verbose)
+ 	printf("%s with %s adapter\n", h->dpy, h->gen);
+       else
+ 	puts(h->gen);
+ /*
+   printf("Reponse %04x.%04x, %04x.%04x\n", qDevIDResponse.hf_devices[0].hf_idhi,
+ 	 qDevIDResponse.hf_devices[0].hf_idlo, 
+ 	 qDevIDResponse.hf_devices[0].hf_classhi,
+ 	 qDevIDResponse.hf_devices[0].hf_classlo);
+ */
+ }
+ #endif
+ 

home help back first fref pref prev next nref lref last post