Ejemplo n.º 1
0
static int match_and_count(struct device * dev, void * data)
{
	struct match_count * m = data;
	struct parisc_device * pdev = to_parisc_device(dev);

	if (check_dev(dev)) {
		if (match_device(m->driver, pdev))
			m->count++;
	}
	return 0;
}
Ejemplo n.º 2
0
static int find_device(struct device * dev, void * data)
{
	struct parisc_device * pdev = to_parisc_device(dev);
	struct find_data * d = (struct find_data*)data;

	if (check_dev(dev)) {
		if (pdev->hpa.start == d->hpa) {
			d->dev = pdev;
			return 1;
		}
	}
	return 0;
}
Ejemplo n.º 3
0
LRESULT CDECL SF_GetDevCaps10u(SFDEVINDEX ndx, CSFDevObject10u *caps)
{
 check_dev(ndx);
 check(caps);

 if(caps && caps->m_SizeOf==sizeof(CSFCapsObject)) // actually, 10x, not '10u'
 {
  debug("kx sfman32: trying caps 1.01, not 1.00\n");
  return SF_GetDevCaps10x(ndx,(CSFCapsObject *)caps);
 }

 CSFDevObject10x dev;
 memset(&dev,0,sizeof(dev));
 dev.m_SizeOf=SFDEV_CAPSIZE_102; // sizeof(CSFDevObject)

 LRESULT ret=call_driver(ndx,SFDEV_GET_DEVICE_CAPS,device_handles[ndx].subdev,(LPARAM)&dev);
 if(ret==SFERR_NOERR)
 {
  if(caps && caps->m_SizeOf>=sizeof(CSFDevObject10u))
  {
   memset(caps,0,sizeof(CSFDevObject10u));

   caps->m_SizeOf=sizeof(CSFDevObject10u);
   caps->m_DevID=ndx;
   caps->m_DevCaps=dev.m_DevCaps;
   caps->m_RomID=dev.m_RomId;   /* ID for a Sound ROM used in a device      */
   caps->m_RomVer=dev.m_RomVer; /* Version for a Sound ROM used in a device */
   strncpy(caps->m_DevName,dev.m_DevName,sizeof(caps->m_DevName));      /* MMSystem name for MIDI Output Device     */

   return ret;
  }

  return SFERR_RESOURCE_INSUFFICIENT;
 }
 else return ret;
}
Ejemplo n.º 4
0
static void ParseParam(int argc, char *argv[], struct dynamo_param *param)
{
	// Local variables

	char *pcOption;

	BOOL bParamIometer = FALSE;
	BOOL bParamDynamo  = FALSE;

	int count = 0;
	ifstream devfile;

	// Walk through the parameter list

	for (int I = 1; I < argc; I++) {

		// NOTE: The following piece is from the Syntax() function:
		//       =====BEGIN============================================
		//       // Solaris 2.7 must have the switch (? is used for its own purpose).
		//       cout << "dynamo \\?" << endl;		
		//       =====END==============================================
		//       Given Solaris 7 is pretty old (released in 1998), we
		//       no longer support this option. If it is nevertheless
		//       still needed, then add support back into the 
		//       ParseParam()and Syntax() function.

		// Ensure minimal parameter length

		if (strlen(argv[I]) < 2) {
			Syntax("Options must have a length of at least 2 characters.");
			return;
		}

		// Ensure that each parameter has a leading option indicator
		
		if (argv[I][0] == '-') {
			pcOption = &argv[I][1];
			if (argv[I][1] == '-') {
				pcOption = &argv[I][2];
			}
		}
		else {
			Syntax("Options must start with a leading option indicator (\"-\" or \"--\").");
			return;			
		}
		
		// Process parameters that have no argument
		// (alphabetic order; short options followed by long options)

		if (strcasecmp(pcOption, "?") == 0) {
			Syntax();
			return;
		}
		
		if (strcasecmp(pcOption, "H") == 0 || strcasecmp(pcOption, "HELP") == 0) {
			Syntax();
			return;
		}
		
#if defined(IOMTR_OS_LINUX) || defined(IOMTR_OS_OSX) || defined(IOMTR_OS_SOLARIS)
		if (strcasecmp(pcOption, "L") == 0) {
			do_syslog = TRUE;
			openlog(NEW_WORKER_EXECUTABLE, 0, LOG_USER);
			continue;
		}
#endif

		// Process parameters that have (an) argument(s)
		// (alphabetic order; short options followed by long options)
		
		I++;
		if (I >= argc) {
			Syntax("Options requires one or more argument(s).");
			return;
		}
			
#if defined (IOMTR_SETTING_CPU_AFFINITY) && (defined(IOMTR_OSFAMILY_WINDOWS) || defined(IOMTR_OS_LINUX))
		if (strcasecmp(pcOption, "C") == 0) {
			if (argv[I])
			{
				// Lets use sscanf below to support hex input
				ULONG_PTR tempMask = 0;
				
				// Handle both hex and decimal values. Abstract format spec syntax (in iocommon.h)
				if (argv[I][0] == '0' && argv[I][1] == 'x')
					sscanf(argv[I],"0x%" IOMTR_FORMAT_SPEC_64BIT "x", &tempMask);
				else
					sscanf(argv[I],"%" IOMTR_FORMAT_SPEC_64BIT "d", &tempMask);

//#if defined (IOMTR_SETTING_CPU_AFFINITY)
				param->cpu_affinity = tempMask;
//#endif
			}
			continue;
		}
#endif

#if defined(IOMTR_OS_LINUX) || defined(IOMTR_OS_OSX) || defined(IOMTR_OS_SOLARIS)			
		if (strcasecmp(pcOption, "D") == 0) {
			if (check_dev(argv[I])) {
				Syntax("Not a valid device.");
				return;
			}
			if (count < MAX_TARGETS) {
				strcpy((*param->blkdevlist)[count++], argv[I]);
			} else {
				cout << "Too many targets you want to test, skip " << argv[I] << endl;
			}
			continue;
		}
		
		if (strcasecmp(pcOption, "F") == 0) {
			char devname[MAX_NAME];
			devfile.open(argv[I]);
			if (!devfile.is_open()) {
				Syntax("Can not open device file list.");
				return;
			}
			while (!devfile.eof()) {
				memset(devname, 0, MAX_NAME);
				devfile.getline(devname, MAX_NAME - 1);
				if (check_dev(devname))
					continue;
				if (count < MAX_TARGETS) {
					strcpy((*param->blkdevlist)[count++], devname);
				} else {
					cout << "Too many targets you want to test, skip " << devname << endl;
				}
			}
			continue;
		}
#endif
	
		if (strcasecmp(pcOption, "I") == 0) {
			if (bParamIometer == TRUE) {
				Syntax("Iometer address was specified more than once.");
				return;
			}
			if (strlen(argv[I]) >= MAX_NETWORK_NAME) {
				Syntax("Iometer address parameter was too long.");
				return;
			}
			strcpy(param->iometer, argv[I]);
			bParamIometer = TRUE;		
			continue;
		}
		
		if (strcasecmp(pcOption, "M") == 0) {
			// No check for more then once specification (as we have a default)
			if (strlen(argv[I]) >= MAX_NETWORK_NAME) {
				Syntax("Manager network name parameter was too long.");
				return;
			}
			strcpy(param->manager_computer_name, argv[I]);
			bParamDynamo = TRUE;
			continue;
		}
		
		if (strcasecmp(pcOption, "N") == 0) {
			if (param->manager_name[0] != '\0') {
				Syntax("Manager name was specified more than once.");
				return;
			}
			if (strlen(argv[I]) >= MAX_WORKER_NAME) {
				Syntax("Manager name parameter was too long.");
				return;
			}
			strcpy(param->manager_name, argv[I]);
			continue;
		}
		
		if (strcasecmp(pcOption, "P") == 0) {
			if (argv[I])
				param->login_port_number = atoi(argv[I]);
			if (param->login_port_number < 1 || param->login_port_number > 65535) {
				Syntax("Port number was out of range.");
				param->login_port_number = 0;
				return;
			}
			continue;
		}

#if defined(IOMTR_OS_LINUX) || defined(IOMTR_OSFAMILY_NETWARE) || defined(IOMTR_OS_OSX) || defined(IOMTR_OS_SOLARIS)
		if (strcasecmp(pcOption, "X") == 0) {
			if ((strlen(argv[I]) + strlen(param->manager_exclude_fs)) >= MAX_EXCLUDE_FILESYS) {
				Syntax("Excluded filesystem list too long.");
				return;
			}
			strcat(param->manager_exclude_fs, argv[I]);
			strcat(param->manager_exclude_fs, " ");
			continue;
		}
#endif

		if (strcasecmp(pcOption, "FLAG") == 0) {
			if (strcasecmp(argv[I], "FORCE_RAW") == 0) {
				param->disk_control = RAWDISK_VIEW_FULL;
				cout << "Dynamo will display raw disks with valid partitions." << endl;
				continue;
			}
#if defined(IOMTR_OSFAMILY_WINDOWS) || defined(IOMTR_OS_OSX)
			if (strcasecmp(argv[I], "USE_RDTSC") == 0) {
				param->timer_type = TIMER_RDTSC;
				//
				// Kludge, we don't really need the above param->timer_type since we can 
				// directly access the TimerType global defines in IoTime.h. This should
				// be cleaned up better.
				//
				if (param->timer_type != TIMER_UNDEFINED && param->timer_type < TIMER_TYPE_MAX)
				{
					TimerType = (timer_type) param->timer_type;
					cout << "Dynamo will attempt to use the processor's high precision timer." << endl;
				}
				continue;				
			}
#endif
			// Unknown flag
			{
				char temp[256];
				snprintf(temp, 256, "Flag unknown or not supported on this platform: %s", argv[I]);
				Syntax(temp);
				return;
			}
		}

		// Unknown parameter
		{
			char temp[256];
			snprintf(temp, 256, "Option unknown or not supported on this platform: %s", argv[I-1]);
			Syntax(temp);
			return;
		}
	}

	// Enforce switch combinations
	
	if (bParamIometer && !bParamDynamo) {
		Syntax("Specifying the Iometer address, the Manager network name parameter becomes mandatory.");
	}
	
	cout << endl; // add one more newline.

	return;
}
Ejemplo n.º 5
0
/* ######################################################################### */
static void ParseParam(int argc, char *argv[], struct dynamo_param *param)
{
	// Local variables
	
	char cSwitchKey;
	
	BOOL bParamIometer = FALSE;
	BOOL bParamDynamo  = FALSE;
	int count = 0;
	ifstream devfile;

	// Walk through the parameter list

	for( int I = 1; I < argc; I++ ) {

		// See if the user is requesting syntax help.
		
		if ( ( argv[I][0] == '?' ) || ( argv[I][1] == '?' ) ) {
			Syntax();
			return;
		}

		// Ensure that the each parameter has a leading switch
		
		if ( ( argv[I][0] != '-' ) && ( argv[I][0] != '/' ) ) {
			Syntax( "Exactly one letter must follow a switch character.\n"
				"Switch characters are \"-\" and \"/\"." );
			return;			
		}

		if ( strlen( argv[I] ) != 2 ) {
			Syntax( "Exactly one letter must follow a switch character.\n"
				"Switch characters are \"-\" and \"/\"." );
			return;			
		}
		
		// Ensure that each parameter has a value following the switch
		
		if( ( I + 1 ) >= argc ) {
			Syntax("An additional parameter was expected after the last switch.");
			return;
		}

		// Process the parameters based on the switch

		cSwitchKey = toupper( argv[I][1] );
		I++;
		
		switch( cSwitchKey ) {
			case 'I':
				if ( bParamIometer == TRUE ) {
					Syntax("Iometer address was specified more than once.");
					return;
				}
				if ( strlen( argv[I] ) >= MAX_NETWORK_NAME ) {
					Syntax("Iometer address parameter was too long.");
					return;
				}
				strcpy( param->iometer, argv[I] );
				bParamIometer = TRUE;
				break;
			case 'M':
				// No check for more then once specification (as we have a default)
				if ( strlen( argv[I] ) >= MAX_NETWORK_NAME ) {
					Syntax("Manager network name parameter was too long.");
					return;
				}
				strcpy( param->manager_computer_name, argv[I] );
				bParamDynamo = TRUE;
				break;
			case 'N':
				if ( param->manager_name[0] != '\0' ) {
					Syntax("Manager name was specified more than once.");
					return;
				}
				if ( strlen( argv[I] ) >= MAX_WORKER_NAME ) {
					Syntax("Manager name parameter was too long.");
					return;
				}
				strcpy( param->manager_name, argv[I] );
				break;
#if defined(IOMTR_OS_LINUX) || defined(IOMTR_OS_NETWARE) || defined(IOMTR_OS_SOLARIS)
			case 'X':
				if ( ( strlen( argv[I] ) + strlen( param->manager_exclude_fs ) ) >= MAX_EXCLUDE_FILESYS ) {
					Syntax("Excluded filesystem list too long.");
					return;
				}
				strcat( param->manager_exclude_fs, argv[I] );
        			strcat( param->manager_exclude_fs, " " );
				break;
#endif
#if defined(IOMTR_OS_LINUX) || defined(IOMTR_OS_SOLARIS)
			case 'D':
				if (check_dev(argv[I])) {
					Syntax("Not a valid device.");
					return;
				}
				if (count < MAX_TARGETS) {
					strcpy((*param->blkdevlist)[count++], argv[I]);
				}
				else {
					cout << "Too many targets you want to test, skip " << argv[I] << endl;
				}
				break;
			case 'F':
				char devname[MAX_NAME];
				
				devfile.open(argv[I]);
				if (!devfile.is_open()) { 
					Syntax("Can not open device file list.");
					return;
				}
				while (!devfile.eof()) {
					memset(devname, 0, MAX_NAME);
					devfile.getline(devname, MAX_NAME - 1);
					if (check_dev(devname))
						continue;
					if (count < MAX_TARGETS) {
						strcpy((*param->blkdevlist)[count++], devname);
					}
					else {
						cout << "Too many targets you want to test, skip " << devname << endl;
					}					
				}
				break;
			case 'L':
				do_syslog = TRUE;
				openlog(NEW_WORKER_EXECUTABLE, 0, LOG_USER);
				break;
#endif
#if defined(IOMTR_OS_LINUX) || defined(IOMTR_OS_WIN32) || defined(IOMTR_OS_WIN64)
			case 'C':
				if (argv[I])
					param->cpu_affinity = (unsigned long)atol(argv[I]);
				break;
#endif
			default:
				{
					char tmpary[2] = { cSwitchKey, 0 };
#if defined(IOMTR_OSFAMILY_NETWARE) || defined(IOMTR_OSFAMILY_UNIX)
					char temp_array[128];
					strcpy(temp_array, "Unrecognized switch: ");
					strcat(temp_array, tmpary);
					strcat(temp_array, ".");
					Syntax(temp_array);
#elif defined(IOMTR_OSFAMILY_WINDOWS)
					Syntax("Unrecognized switch: " + (CString)tmpary + ".");
#else
 #warning ===> WARNING: You have to do some coding here to get the port done!
#endif
				}
				break;
		}
	}

	// Enforce switch combinations
	if( bParamIometer && !bParamDynamo ) {
		Syntax( "When specifying the Iometer address, the Manager network name parameter is mandatory." );
	}
	
	return;
}