Esempio n. 1
0
/* 
 * Written using information from:
 *
 * http://service.software.ibm.com/cgi-bin/support/rs6000.support/techbrowse/tbgaus?gaus_mode=8&documents=B93576892313352&database=task
 *
 * Not fully implemented.  In particular there are ways to resolve the 
 * "(unknown)" clock speeds of many of these models.  See page for details.
 * 
 */
bool 
GetInfo_CPU( QListView *lBox )
{
  struct utsname info;
  struct model *table = _models;  /* table of model information */
  char model_ID[21] = "";  /* information for table lookup */
  char cpu_ID[7] = "";    /* unique CPU ID */
  int i;
  QListViewItem *lastitem = NULL;

  lBox->addColumn(i18n("Information"));
  lBox->addColumn(i18n("Value"));

  if (uname(&info) == -1)
    {
      kdError(0) << "uname() failed: errno = " << errno << endl;
      return false;
    }

  strncat(model_ID, info.machine+8, 2);  /* we want the ninth and tenth digits */
  strncat(cpu_ID, info.machine+2, 6);

  if (strcmp(model_ID, "4C") == 0)  /* need to use a different model_ID and model table */
    {
      if (odm_initialize() == -1)
        kdError(0) << "odm_initialize() failed: odmerrno = " << odmerrno << endl;
      else 
        {
          struct CuAt cuat;  /* Customized Device attribute */

          /* equivalent to uname -M */
          if ( odm_get_first(CuAt_CLASS, (char *)"name='sys0' and attribute='modelname'", &cuat) )
            {
              strcpy(model_ID, cuat.value);
              table = _4C_models;
            }

          odm_terminate();
        }
    }

  lastitem = new QListViewItem(lBox, lastitem, QString("CPU ID"), QString(cpu_ID));
  lastitem = new QListViewItem(lBox, lastitem, QString("Node"), QString(info.nodename));
  lastitem = new QListViewItem(lBox, lastitem, QString("OS"), QString(info.sysname) + 
             QString(" ") + QString(info.version) + QString(".") + QString(info.release));

  for (i=0; *(table[i].model_ID); i++)
    if (strcmp(model_ID, table[i].model_ID) == 0)
      {
        lastitem = new QListViewItem(lBox, lastitem, QString("Machine Type"), QString(table[i].machine_type));
        lastitem = new QListViewItem(lBox, lastitem, QString("Architecture"), QString(chip_name[table[i].architecture]));
        lastitem = new QListViewItem(lBox, lastitem, QString("Speed"), QString(table[i].processor_speed) + QString(" Mhz"));
        break;
      }
         
  return(true);
}
Esempio n. 2
0
int
main(int argc, char **argv)
{
    char *logical_name, *ptr;
    char sstring[256];
    struct CuDv cudvobj;
    struct PdDv pddvobj;
    int rc, how_many, errflg, c, majorno, minorno, unit, verbose;
    struct cfg_dd cfg;
    struct cfg_load load;
    int *minor_list;
    extern int optind;
    extern char *optarg;

    verbose = errflg = 0;
    logical_name = NULL;
    while ((c = getopt(argc,argv,"vl:")) != EOF) {
	switch (c) {
	case 'v':
	    verbose++;
	    break;
	case 'l':
	    if (logical_name != NULL)
		errflg++;
	    logical_name = optarg;
	    break;
	default:
	    errflg++;
	}
    }
    if (errflg)
	exit(E_ARGS);

    if (logical_name == NULL)
	exit(E_LNAME);

    if (odm_initialize() == -1)
	exit(E_ODMINIT);

    /* Get Customized Device Object for this device */
    sprintf(sstring,"name = '%s'",logical_name);
    rc = (int) odm_get_first(CuDv_CLASS, sstring, &cudvobj);
    if (rc ==  0) {
	err_exit(E_NOCuDv);
    } else if (rc == -1) {
	err_exit(E_ODMGET);
    }

    if (cudvobj.status == DEFINED)
	err_exit(E_OK);  /* already unconf'd */

    /* get device's predefined object */
    sprintf(sstring,"uniquetype = '%s'", cudvobj.PdDvLn_Lvalue);
    rc = (int) odm_get_first(PdDv_CLASS, sstring, &pddvobj);
    if (rc ==  0)
	err_exit(E_NOPdDv);
    else if (rc == -1)
	err_exit(E_ODMGET);

    /*
     * Call sysconfig() to "terminate" the device.
     * If fails with EBUSY, then device instance is "open",
     * and device cannot be "unconfigured".  Any other errno
     * returned will be ignored since we MUST unconfigure the
     * device even if it reports some other error.
     */

    /* get major number of device */
    majorno = genmajor(pddvobj.DvDr);
    if (majorno == -1) {
	return(E_MAJORNO);
    }
    /* get minor number */
    minor_list = getminor(majorno, &how_many, pddvobj.DvDr);
    if (minor_list == NULL || how_many == 0)
	err_exit (E_MINORNO);
    vprintf("how_many=%d\n", how_many);
    ptr = logical_name;
    ptr += strlen(pddvobj.prefix);
    unit = atoi(ptr);
    if (unit >= how_many) {
	err_exit (E_MINORNO);
    }
    minorno = minor_list[unit];
    vprintf("unit %d minorno %d\n", unit, minorno);

    /* create devno for this device */
    cfg.devno = makedev(majorno, minorno);
    cfg.kmid = 0;
    cfg.ddsptr = (caddr_t) NULL;
    cfg.ddslen = (int) 0;
    cfg.cmd = CFG_TERM;
    if (sysconfig(SYS_CFGDD, &cfg, sizeof(struct cfg_dd)) == -1) {
	if (errno == EBUSY)
	    err_exit(E_BUSY);
    }
    cfg.kmid = loadext(pddvobj.DvDr, FALSE, FALSE);
    if (cfg.kmid == NULL)
	err_exit(E_UNLOADEXT);

    /* Change the status field of device to "DEFINED" */
    cudvobj.status = DEFINED;
    if (odm_change_obj(CuDv_CLASS, &cudvobj) == -1) 
	err_exit(E_ODMUPDATE);

    /*
     * Terminate ODM
     */
    odm_terminate();
    return (E_OK);
}