void Kernel::registerDrivers() { REGISTER_DEVICE(DummyCrate); REGISTER_DEVICE(DummyDevice); REGISTER_DEVICE(AgilentOscope); REGISTER_DEVICE(NskCrate); REGISTER_DEVICE(NskFastAdc); REGISTER_DEVICE(NskSlowAdc); REGISTER_DEVICE(NskTimer); }
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; }