Lines Matching refs:n2rng

163 	n2rng_t		*n2rng = NULL;  in n2rng_attach()  local
181 n2rng = (n2rng_t *)ddi_get_soft_state(n2rng_softstate, in n2rng_attach()
183 if (n2rng == NULL) { in n2rng_attach()
187 return (n2rng_resume(n2rng)); in n2rng_attach()
200 n2rng = (n2rng_t *)ddi_get_soft_state(n2rng_softstate, instance); in n2rng_attach()
201 ASSERT(n2rng != NULL); in n2rng_attach()
202 n2rng->n_dip = dip; in n2rng_attach()
204 mutex_init(&n2rng->n_lock, NULL, MUTEX_DRIVER, NULL); in n2rng_attach()
205 n2rng->n_flags = 0; in n2rng_attach()
206 n2rng->n_timeout_id = 0; in n2rng_attach()
207 n2rng->n_sticks_per_usec = sticks_per_usec(); in n2rng_attach()
210 n2rng->n_binding_name = ddi_binding_name(dip); in n2rng_attach()
211 if (strncmp(n2rng->n_binding_name, N2RNG_BINDNAME_N2, in n2rng_attach()
216 n2rng->n_binding = N2RNG_CPU_N2; in n2rng_attach()
217 } else if (strncmp(n2rng->n_binding_name, N2RNG_BINDNAME_VF, in n2rng_attach()
222 n2rng->n_binding = N2RNG_CPU_VF; in n2rng_attach()
223 } else if (strncmp(n2rng->n_binding_name, N2RNG_BINDNAME_KT, in n2rng_attach()
228 n2rng->n_binding = N2RNG_CPU_KT; in n2rng_attach()
232 n2rng->n_binding_name); in n2rng_attach()
235 DBG1(n2rng, DCHATTY, "n2rng_attach: n2rng->n_binding_name = %s", in n2rng_attach()
236 n2rng->n_binding_name); in n2rng_attach()
244 DBG4(n2rng, DCHATTY, "n2rng_attach: grp: 0x%lx, maj: %ld, " in n2rng_attach()
263 DBG2(n2rng, DATTACH, "n2rng_attach: ncs api version (%ld.%ld)", in n2rng_attach()
265 n2rng->n_hvapi_major_version = ncs_hsvc[ncs_version_index].hsvc_major; in n2rng_attach()
266 n2rng->n_hvapi_minor_version = (uint_t)ncs_minor_ver; in n2rng_attach()
272 if ((n2rng->n_binding != N2RNG_CPU_N2) && in n2rng_attach()
273 (n2rng->n_hvapi_major_version < 2)) { in n2rng_attach()
275 "version %d.%d detected", n2rng->n_hvapi_major_version, in n2rng_attach()
276 n2rng->n_hvapi_minor_version); in n2rng_attach()
280 if (n2rng_init_ctl(n2rng) != DDI_SUCCESS) { in n2rng_attach()
287 n2rng->n_taskq = ddi_taskq_create(dip, "n2rng_taskq", 1, in n2rng_attach()
290 if (n2rng->n_taskq == NULL) { in n2rng_attach()
296 if (ddi_taskq_dispatch(n2rng->n_taskq, n2rng_config_task, in n2rng_attach()
297 (void *)n2rng, DDI_SLEEP) != DDI_SUCCESS) { in n2rng_attach()
306 if (n2rng->n_taskq != NULL) { in n2rng_attach()
307 ddi_taskq_destroy(n2rng->n_taskq); in n2rng_attach()
308 n2rng->n_taskq = NULL; in n2rng_attach()
311 n2rng_uninit_ctl(n2rng); in n2rng_attach()
313 (void) n2rng_uninit(n2rng); in n2rng_attach()
320 mutex_destroy(&n2rng->n_lock); in n2rng_attach()
331 n2rng_t *n2rng; in n2rng_detach() local
335 n2rng = (n2rng_t *)ddi_get_soft_state(n2rng_softstate, instance); in n2rng_detach()
336 if (n2rng == NULL) { in n2rng_detach()
343 return (n2rng_suspend(n2rng)); in n2rng_detach()
351 if (n2rng->n_taskq != NULL) { in n2rng_detach()
352 ddi_taskq_destroy(n2rng->n_taskq); in n2rng_detach()
353 n2rng->n_taskq = NULL; in n2rng_detach()
357 mutex_enter(&n2rng->n_lock); in n2rng_detach()
358 tid = n2rng->n_timeout_id; in n2rng_detach()
359 n2rng->n_timeout_id = 0; in n2rng_detach()
360 mutex_exit(&n2rng->n_lock); in n2rng_detach()
362 DBG1(n2rng, DCHATTY, "n2rng_detach: untimeout pending retry " in n2rng_detach()
367 n2rng_uninit_ctl(n2rng); in n2rng_detach()
370 rv = n2rng_uninit(n2rng) ? DDI_FAILURE : DDI_SUCCESS; in n2rng_detach()
377 mutex_destroy(&n2rng->n_lock); in n2rng_detach()
385 n2rng_suspend(n2rng_t *n2rng) in n2rng_suspend() argument
388 if (n2rng_uninit(n2rng) != DDI_SUCCESS) { in n2rng_suspend()
398 n2rng_resume(n2rng_t *n2rng) in n2rng_resume() argument
403 return (n2rng_config(n2rng)); in n2rng_resume()
448 cyclesleep(n2rng_t *n2rng, uint64_t delay_sticks) in cyclesleep() argument
462 usecs_to_wait = sticks_to_wait / n2rng->n_sticks_per_usec; in cyclesleep()
513 n2rng_collect_diag_bits(n2rng_t *n2rng, int rngid, in n2rng_collect_diag_bits() argument
557 hverr = n2rng_ctl_write(n2rng, rngid, setupphys, in n2rng_collect_diag_bits()
559 n2rng->n_ctl_data->n_watchdog_cycles, &tdelta); in n2rng_collect_diag_bits()
571 DBG1(n2rng, DHEALTH, in n2rng_collect_diag_bits()
577 cyclesleep(n2rng, tdelta); in n2rng_collect_diag_bits()
588 DBG1(n2rng, DHEALTH, in n2rng_collect_diag_bits()
618 hverr = n2rng_data_read_diag(n2rng, rngid, in n2rng_collect_diag_bits()
634 DBG1(n2rng, DHEALTH, in n2rng_collect_diag_bits()
641 cyclesleep(n2rng, tdelta); in n2rng_collect_diag_bits()
664 hverr = n2rng_ctl_write(n2rng, rngid, setupphys, in n2rng_collect_diag_bits()
665 exitstate, n2rng->n_ctl_data->n_watchdog_cycles, in n2rng_collect_diag_bits()
678 DBG1(n2rng, DHEALTH, in n2rng_collect_diag_bits()
684 cyclesleep(n2rng, tdelta); in n2rng_collect_diag_bits()
695 DBG1(n2rng, DHEALTH, in n2rng_collect_diag_bits()
721 n2rng_getentropy(n2rng_t *n2rng, void *buffer, size_t size) in n2rng_getentropy() argument
752 if (n2rng->n_hvapi_major_version < 2) { in n2rng_getentropy()
761 DBG2(n2rng, DHEALTH, in n2rng_getentropy()
789 DBG1(n2rng, DHEALTH, in n2rng_getentropy()
795 cyclesleep(n2rng, tdelta); in n2rng_getentropy()
810 n2rng_ctl_read(n2rng_t *n2rng, int rngid, uint64_t ctlregs_pa, uint64_t *state, in n2rng_ctl_read() argument
817 if (n2rng->n_hvapi_major_version == 2) { in n2rng_ctl_read()
832 n2rng_ctl_wait(n2rng_t *n2rng, int rngid) in n2rng_ctl_wait() argument
865 DBG1(n2rng, DHEALTH, "n2rng_ctl_wait: " in n2rng_ctl_wait()
870 cyclesleep(n2rng, tdelta); in n2rng_ctl_wait()
876 DBG1(n2rng, DHEALTH, "n2rng_ctl_wait: " in n2rng_ctl_wait()
894 n2rng_ctl_write(n2rng_t *n2rng, int rngid, uint64_t ctlregs_pa, in n2rng_ctl_write() argument
900 if (n2rng->n_hvapi_major_version == 2) { in n2rng_ctl_write()
905 rv = n2rng_ctl_wait(n2rng, rngid); in n2rng_ctl_write()
916 n2rng_data_read_diag(n2rng_t *n2rng, int rngid, uint64_t data_pa, in n2rng_data_read_diag() argument
922 if (n2rng->n_hvapi_major_version == 2) { in n2rng_data_read_diag()
936 n2rng_check_ctl_access(n2rng_t *n2rng) in n2rng_check_ctl_access() argument
942 if (n2rng->n_hvapi_major_version == 2) { in n2rng_check_ctl_access()
962 n2rng_config_retry(n2rng_t *n2rng, clock_t seconds) in n2rng_config_retry() argument
964 mutex_enter(&n2rng->n_lock); in n2rng_config_retry()
966 if (n2rng->n_timeout_id) { in n2rng_config_retry()
967 DBG1(n2rng, DCFG, "n2rng_config_retry: retry pending " in n2rng_config_retry()
968 "id = %x", n2rng->n_timeout_id); in n2rng_config_retry()
970 n2rng->n_timeout_id = timeout(n2rng_config_task, in n2rng_config_retry()
971 (void *)n2rng, drv_usectohz(seconds * SECOND)); in n2rng_config_retry()
972 DBG2(n2rng, DCFG, "n2rng_config_retry: retry scheduled in " in n2rng_config_retry()
973 "%d seconds, id = %x", seconds, n2rng->n_timeout_id); in n2rng_config_retry()
975 mutex_exit(&n2rng->n_lock); in n2rng_config_retry()
995 n2rng_init_ctl(n2rng_t *n2rng) in n2rng_init_ctl() argument
1003 n2rng->n_ctl_data = NULL; in n2rng_init_ctl()
1007 hverr = n2rng_check_ctl_access(n2rng); in n2rng_init_ctl()
1011 DBG1(n2rng, DHEALTH, "n2rng_int_ctl: exceeded busy " in n2rng_init_ctl()
1024 DBG0(n2rng, DATTACH, in n2rng_init_ctl()
1030 n2rng->n_ctl_data = kmem_alloc(sizeof (rng_ctl_data_t), KM_SLEEP); in n2rng_init_ctl()
1031 n2rng->n_ctl_data->n_num_rngs_online = 0; in n2rng_init_ctl()
1037 if (n2rng->n_hvapi_major_version < 2) { in n2rng_init_ctl()
1038 n2rng->n_ctl_data->n_num_rngs = 1; in n2rng_init_ctl()
1040 n2rng->n_ctl_data->n_num_rngs = in n2rng_init_ctl()
1041 ddi_getprop(DDI_DEV_T_ANY, n2rng->n_dip, in n2rng_init_ctl()
1044 if (n2rng->n_ctl_data->n_num_rngs == 0) { in n2rng_init_ctl()
1052 n2rng->n_ctl_data->n_rngs = in n2rng_init_ctl()
1053 kmem_zalloc(n2rng->n_ctl_data->n_num_rngs * in n2rng_init_ctl()
1057 n2rng->n_ctl_data->n_accumulate_cycles = in n2rng_init_ctl()
1058 ddi_getprop(DDI_DEV_T_ANY, n2rng->n_dip, in n2rng_init_ctl()
1063 n2rng->n_ctl_data->n_hc_secs = ddi_getprop(DDI_DEV_T_ANY, n2rng->n_dip, in n2rng_init_ctl()
1068 if ((n2rng->n_hvapi_major_version < 2) && in n2rng_init_ctl()
1069 (n2rng->n_ctl_data->n_hc_secs > 0)) { in n2rng_init_ctl()
1072 n2rng->n_hvapi_major_version, in n2rng_init_ctl()
1073 n2rng->n_hvapi_minor_version); in n2rng_init_ctl()
1074 n2rng->n_ctl_data->n_hc_secs = 0; in n2rng_init_ctl()
1079 if (n2rng->n_ctl_data->n_hc_secs <= 0) { in n2rng_init_ctl()
1080 n2rng->n_ctl_data->n_watchdog_cycles = 0; in n2rng_init_ctl()
1082 n2rng->n_ctl_data->n_watchdog_cycles = in n2rng_init_ctl()
1084 n2rng->n_ctl_data->n_hc_secs) * in n2rng_init_ctl()
1085 n2rng->n_sticks_per_usec * 1000000; in n2rng_init_ctl()
1092 for (rngid = 0; rngid < n2rng->n_ctl_data->n_num_rngs; rngid++) { in n2rng_init_ctl()
1094 rng = &n2rng->n_ctl_data->n_rngs[rngid]; in n2rng_init_ctl()
1119 n2rng_setcontrol(n2rng); in n2rng_init_ctl()
1120 DBG2(n2rng, DATTACH, in n2rng_init_ctl()
1122 n2rng->n_ctl_data->n_num_rngs, in n2rng_init_ctl()
1123 (n2rng->n_ctl_data->n_num_rngs == 1) ? "" : "s"); in n2rng_init_ctl()
1124 DBG2(n2rng, DCFG, in n2rng_init_ctl()
1126 n2rng->n_sticks_per_usec, in n2rng_init_ctl()
1127 n2rng->n_ctl_data->n_hc_secs); in n2rng_init_ctl()
1128 DBG2(n2rng, DCFG, in n2rng_init_ctl()
1130 "n_accumulate_cycles = %ld", n2rng->n_ctl_data->n_watchdog_cycles, in n2rng_init_ctl()
1131 n2rng->n_ctl_data->n_accumulate_cycles); in n2rng_init_ctl()
1137 n2rng_uninit_ctl(n2rng_t *n2rng) in n2rng_uninit_ctl() argument
1139 if (n2rng->n_ctl_data) { in n2rng_uninit_ctl()
1140 if (n2rng->n_ctl_data->n_num_rngs) { in n2rng_uninit_ctl()
1141 kmem_free(n2rng->n_ctl_data->n_rngs, in n2rng_uninit_ctl()
1142 n2rng->n_ctl_data->n_num_rngs * in n2rng_uninit_ctl()
1144 n2rng->n_ctl_data->n_rngs = NULL; in n2rng_uninit_ctl()
1145 n2rng->n_ctl_data->n_num_rngs = 0; in n2rng_uninit_ctl()
1147 kmem_free(n2rng->n_ctl_data, sizeof (rng_ctl_data_t)); in n2rng_uninit_ctl()
1148 n2rng->n_ctl_data = NULL; in n2rng_uninit_ctl()
1159 n2rng_config_test(n2rng_t *n2rng) in n2rng_config_test() argument
1194 DBG1(n2rng, DHEALTH, "n2rng_config_test: " in n2rng_config_test()
1199 cyclesleep(n2rng, tdelta); in n2rng_config_test()
1223 n2rng_config(n2rng_t *n2rng) in n2rng_config() argument
1233 if (n2rng_iscontrol(n2rng)) { in n2rng_config()
1235 for (rngid = 0; rngid < n2rng->n_ctl_data->n_num_rngs; in n2rng_config()
1238 rng = &n2rng->n_ctl_data->n_rngs[rngid]; in n2rng_config()
1245 if ((n2rng->n_binding == N2RNG_CPU_VF) && in n2rng_config()
1246 (n2rng->n_hvapi_major_version < 2)) { in n2rng_config()
1254 DBG1(n2rng, DCFG, "n2rng_config: " in n2rng_config()
1257 rv = n2rng_do_health_check(n2rng, rngid); in n2rng_config()
1260 rv = n2rng_do_health_check(n2rng, rngid); in n2rng_config()
1269 DBG1(n2rng, DCFG, "n2rng_config: rng(%d) " in n2rng_config()
1274 n2rng->n_ctl_data->n_num_rngs_online++; in n2rng_config()
1285 n2rng->n_ctl_data->n_num_rngs_online--; in n2rng_config()
1291 DBG2(n2rng, DCFG, "n2rng_config: %d rng%s online", in n2rng_config()
1292 n2rng->n_ctl_data->n_num_rngs_online, in n2rng_config()
1293 (n2rng->n_ctl_data->n_num_rngs_online == 1) ? "" : "s"); in n2rng_config()
1296 if (n2rng->n_ctl_data->n_num_rngs_online == 0) { in n2rng_config()
1298 n2rng->n_ctl_data->n_num_rngs, in n2rng_config()
1299 (n2rng->n_ctl_data->n_num_rngs == 1) ? "" : "s"); in n2rng_config()
1302 n2rng_setconfigured(n2rng); in n2rng_config()
1306 rv = n2rng_config_test(n2rng); in n2rng_config()
1309 n2rng_setconfigured(n2rng); in n2rng_config()
1324 if (n2rng_isconfigured(n2rng)) { in n2rng_config()
1326 if (n2rng_init(n2rng) != DDI_SUCCESS) { in n2rng_config()
1335 if (n2rng_iscontrol(n2rng) && in n2rng_config()
1336 (n2rng->n_ctl_data->n_hc_secs > 0)) { in n2rng_config()
1337 n2rng_config_retry(n2rng, in n2rng_config()
1338 n2rng->n_ctl_data->n_hc_secs); in n2rng_config()
1340 } else if (!n2rng_isfailed(n2rng)) { in n2rng_config()
1342 n2rng_config_retry(n2rng, RNG_CFG_RETRY_SECS); in n2rng_config()
1348 (void) n2rng_unregister_provider(n2rng); in n2rng_config()
1349 n2rng_setfailed(n2rng); in n2rng_config()
1362 n2rng_t *n2rng = (n2rng_t *)targ; in n2rng_config_task() local
1364 mutex_enter(&n2rng->n_lock); in n2rng_config_task()
1365 n2rng->n_timeout_id = 0; in n2rng_config_task()
1366 mutex_exit(&n2rng->n_lock); in n2rng_config_task()
1367 (void) n2rng_config(n2rng); in n2rng_config_task()