4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * CDDL HEADER START
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * The contents of this file are subject to the terms of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Common Development and Distribution License (the "License").
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * You may not use this file except in compliance with the License.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * See the License for the specific language governing permissions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * and limitations under the License.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * When distributing Covered Code, include this CDDL HEADER in each
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * If applicable, add the following below this CDDL HEADER, with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * fields enclosed by brackets "[]" replaced with your own identifying
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * information: Portions Copyright [yyyy] [name of copyright owner]
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * CDDL HEADER END
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Niagara 2 Random Number Generator (RNG) driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic int n2rng_attach(dev_info_t *, ddi_attach_cmd_t);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstatic int n2rng_detach(dev_info_t *, ddi_detach_cmd_t);
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync * Device operations.
if (rv != 0) {
return (rv);
return (rv);
if (rv == 0) {
return (rv);
if (instance != 0) {
return (DDI_FAILURE);
switch (cmd) {
case DDI_RESUME:
instance);
return (DDI_FAILURE);
case DDI_ATTACH:
return (DDI_FAILURE);
return (DDI_FAILURE);
goto errorexit;
if (rv == 0)
goto errorexit;
goto errorexit;
TASKQ_DEFAULTPRI, 0);
goto errorexit;
goto errorexit;
return (DDI_SUCCESS);
return (DDI_FAILURE);
return (DDI_FAILURE);
switch (cmd) {
case DDI_SUSPEND:
case DDI_DETACH:
return (DDI_FAILURE);
if (tid) {
return (rv);
return (DDI_FAILURE);
return (DDI_SUCCESS);
switch (hv_errcode) {
case H_EWOULDBLOCK:
case H_EIO:
case H_EBUSY:
case H_EOK:
s_errcode = 0;
case H_ENOACCESS:
case H_ENORADDR:
case H_EBADALIGN:
return (s_errcode);
if (sticks_to_wait <= 0) {
if (sys_ticks_to_wait > 0) {
} else if (usecs_to_wait > 0) {
switch (hverr) {
case H_EBADALIGN:
case H_ENORADDR:
case H_ENOACCESS:
case H_EWOULDBLOCK:
return (EINVAL);
return (EINVAL);
while (rnglooping) {
switch (hverr) {
case H_EOK:
return (rv);
case H_EWOULDBLOCK:
return (rv);
case H_EBUSY:
return (rv);
goto restore_state;
if (numbytes > 0) {
for (i = 0; i < numchunks; i++) {
sizeof (uint64_t)) :
busycount = 0;
blockcount = 0;
while (rnglooping) {
RNG_DIAG_CHUNK_SIZE * i),
switch (hverr) {
case H_EOK:
case H_EIO:
case H_ENOACCESS:
return (rv);
case H_EWOULDBLOCK:
if (++blockcount >
return (rv);
goto restore_state;
busycount = 0;
blockcount = 0;
while (rnglooping) {
&tdelta);
switch (hverr) {
case H_EOK:
case H_EWOULDBLOCK:
return (rv);
case H_EBUSY:
return (rv);
for (i = 0; i < num_w; i++) {
while (rnglooping) {
switch (hverr) {
case H_EOK:
failcount = 0;
case H_EIO:
if (++failcount >
goto exitpoint;
goto exitpoint;
case H_EWOULDBLOCK:
goto exitpoint;
goto exitpoint;
return (rv);
if (rv == 0) {
*wdelta = 0;
return (rv);
while (rnglooping) {
switch (rv) {
case H_EOK:
case H_EWOULDBLOCK:
return (rv);
case H_EBUSY:
return (rv);
return (rv);
return (rv);
if (*tdelta == 0) {
return (rv);
return (rv);
static uint64_t
return (rv);
return (DDI_SUCCESS);
N2RNG_PROP_NUM_UNITS, 0);
return (DDI_FAILURE);
return (DDI_SUCCESS);
sizeof (rng_entry_t));
while (rnglooping) {
switch (hverr) {
case H_EOK:
failcount = 0;
case H_EIO:
goto exitpoint;
case H_EWOULDBLOCK:
goto exitpoint;
case H_ENOACCESS:
goto exitpoint;
goto exitpoint;
return (rv);
rngid++) {
switch (rv) {
goto errorexit;
switch (rv) {
case EIO:
goto errorexit;
goto errorexit;
return (DDI_SUCCESS);
return (DDI_FAILURE);