Esempio n. 1
0
 void Kernel::registerDrivers() {
     REGISTER_DEVICE(DummyCrate);
     REGISTER_DEVICE(DummyDevice);
     REGISTER_DEVICE(AgilentOscope);
     REGISTER_DEVICE(NskCrate);
     REGISTER_DEVICE(NskFastAdc);
     REGISTER_DEVICE(NskSlowAdc);
     REGISTER_DEVICE(NskTimer);
 }
Esempio n. 2
0
static int vpapi_init_device(unsigned long arg)
{
	VpApiModInitDeviceType data;
	VpDeviceIdType deviceId;
	VpProfileDataType devProfile[MAX_PROFILE_SIZE];
	VpProfileDataType acProfile[MAX_PROFILE_SIZE];
	VpProfileDataType dcProfile[MAX_PROFILE_SIZE];
	VpProfileDataType ringProfile[MAX_PROFILE_SIZE];
	VpProfileDataType fxoAcProfile[MAX_PROFILE_SIZE];
	VpProfileDataType fxoCfgProfile[MAX_PROFILE_SIZE];
	VpProfilePtrType pDevProfile = NULL, pAcProfile = NULL;
	VpProfilePtrType pDcProfile = NULL, pRingProfile = NULL;
	VpProfilePtrType pFxoAcProfile = NULL, pFxoCfgProfile = NULL;
	u16 devProfileSize, acProfileSize, dcProfileSize;
	u16 ringProfileSize, fxoAcProfileSize, fxoCfgProfileSize;

	/* Get user data */
	if(copy_from_user(&data, (void*)arg, sizeof(VpApiModInitDeviceType))) {
			printk("%s: copy_from_user failed\n", __func__);
			return -EFAULT;
	}

	deviceId = data.deviceId;
	devProfileSize = data.devProfileSize;
	acProfileSize = data.acProfileSize;
	dcProfileSize = data.dcProfileSize;
	ringProfileSize = data.ringProfileSize;
	fxoAcProfileSize = data.fxoAcProfileSize;
	fxoCfgProfileSize = data.fxoCfgProfileSize;

	if(devProfileSize) {
		/* Get device profile */
		if(copy_from_user(devProfile, (void*)data.pDevProfile, (sizeof(VpProfileDataType)*devProfileSize))) {
			printk("%s: copy_from_user failed\n", __func__);
			return -EFAULT;
		}
		pDevProfile = devProfile;
	}

	if(acProfileSize) {
		/* Get AC profile */
		if(copy_from_user(acProfile, (void*)data.pAcProfile, (sizeof(VpProfileDataType)*acProfileSize))) {
			printk("%s: copy_from_user failed\n", __func__);
			return -EFAULT;
		}
		pAcProfile = acProfile;
	}

	if(dcProfileSize) {
		/* Get DC profile */
		if(copy_from_user(dcProfile, (void*)data.pDcProfile, (sizeof(VpProfileDataType)*dcProfileSize))) {
			printk("%s: copy_from_user failed\n", __func__);
			return -EFAULT;
		}
		pDcProfile = dcProfile;
	}

	if(ringProfileSize) {
		/* Get ring profile */
		if(copy_from_user(ringProfile, (void*)data.pRingProfile, (sizeof(VpProfileDataType)*ringProfileSize))) {
			printk("%s: copy_from_user failed\n", __func__);
			return -EFAULT;
		}
		pRingProfile = ringProfile;
	}

	if(fxoAcProfileSize) {
		/* Get FXO AC profile */
		if(copy_from_user(fxoAcProfile, (void*)data.pFxoAcProfile, (sizeof(VpProfileDataType)*fxoAcProfileSize))) {
			printk("%s: copy_from_user failed\n", __func__);
			return -EFAULT;
		}
		pFxoAcProfile = fxoAcProfile;
	}

	if(fxoCfgProfileSize) {
		/* Get FXO configuration profile */
		if(copy_from_user(fxoCfgProfile, (void*)data.pFxoCfgProfile,
					 (sizeof(VpProfileDataType)*fxoCfgProfileSize))) {
			printk("%s: copy_from_user failed\n", __func__);
			return -EFAULT;
		}
		pFxoCfgProfile = fxoCfgProfile;
	}

	data.status = VpInitDevice(&pDevCtx[deviceId], pDevProfile, pAcProfile, pDcProfile, pRingProfile,
					 pFxoAcProfile, pFxoCfgProfile);

	if(data.status == VP_STATUS_SUCCESS) {
		total_devs++;
		REGISTER_DEVICE(deviceId);

		if(!atomic_read(&vpapi_init)) {
#if defined(SLIC_TIMER_EVENT_SUPPORT)
			memset(&vpapi_timer, 0, sizeof(struct timer_list));
			init_timer(&vpapi_timer);
			vpapi_timer.function = vpapi_tick_handler;
			vpapi_timer.data = -1;
			vpapi_timer.expires = jiffies + VPAPI_TICK_TIMER_PERIOD;
			add_timer(&vpapi_timer);
#endif
			atomic_set(&vpapi_init, 1);
		}
	}

	/* Copy status back to user */
	if(copy_to_user((void*)arg, &data, sizeof(VpApiModInitDeviceType))) {
		printk("%s: copy_to_user failed\n", __func__);
		return  -EFAULT;
	}

	return 0;
}