scsi_resource.c revision 4ab75253616c6d68e967c10221bb663c0bfa99df
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Callback id
*/
extern ddi_dma_attr_t scsi_alloc_attr;
struct buf *
{
int kmflag;
"scsi_alloc_consistent_buf_start");
if (!in_bp) {
goto no_resource;
}
} else {
/* we are establishing a new buffer memory association */
}
/* limit bits that can be set by bflags argument */
if (datalen) {
/*
* use i_ddi_mem_alloc() for now until we have an interface to
* allocate memory for DMA which doesn't require a DMA handle.
* ddi_iopb_alloc() is obsolete and we want more flexibility in
* controlling the DMA address constraints.
*/
if (callback == SLEEP_FUNC) {
} else {
if (!in_bp)
goto no_resource;
}
}
}
"scsi_alloc_consistent_buf_end");
return (bp);
}
"scsi_alloc_consistent_buf_end (return1)");
return (NULL);
}
void
{
"scsi_free_consistent_buf_start");
if (!bp)
return;
if (scsi_callback_id != 0) {
}
"scsi_free_consistent_buf_end");
}
struct scsi_pkt *
{
struct scsi_pkt_cache_wrapper *pktw;
int kf;
if (callback == SLEEP_FUNC)
else
kf = KM_NOSLEEP;
kf);
goto fail1;
pktw->pcw_kmflags = 0;
/*
* target driver initializes pkt_comp, pkt_flags,
* and pkt_time
*/
in_pktp->pkt_statistics = 0;
in_pktp->pkt_reason = 0;
(cmdlen > DEFAULT_CDBLEN)) {
goto fail2;
}
if (pplen > DEFAULT_PRIVLEN) {
goto fail3;
}
(statuslen > DEFAULT_SCBLEN)) {
goto fail4;
}
goto fail5;
}
}
}
}
return (in_pktp);
sizeof (struct scsi_pkt));
in_pktp->pkt_scblen = 0;
}
in_pktp->pkt_tgtlen = 0;
}
sizeof (struct scsi_pkt));
in_pktp->pkt_cdblen = 0;
}
pktw->pcw_kmflags &=
}
return (NULL);
}
void
{
struct scsi_pkt_cache_wrapper *pktw;
/*
* if we allocated memory for anything that wouldn't fit, free
* the memory and restore the pointers
*/
DEFAULT_PRIVLEN + sizeof (struct scsi_pkt_cache_wrapper));
pktp->pkt_scblen = 0;
}
pktp->pkt_tgtlen = 0;
}
sizeof (struct scsi_pkt_cache_wrapper));
pktp->pkt_cdblen = 0;
}
pktw->pcw_kmflags &=
if (scsi_callback_id != 0) {
}
}
struct scsi_pkt *
{
"scsi_init_pkt_start: addr %p in_pktp %p cmdlen %d statuslen %d pplen %d",
if (flags & PKT_CONSISTENT_OLD) {
flags &= ~PKT_CONSISTENT_OLD;
flags |= PKT_CONSISTENT;
}
#endif
}
}
"scsi_init_pkt_end: pktp %p", pktp);
return (pktp);
}
void
{
"scsi_destroy_pkt_start: pkt %p", pkt);
if (scsi_callback_id != 0) {
}
"scsi_destroy_pkt_end");
}
/*
* Generic Resource Allocation Routines
*/
struct scsi_pkt *
{
}
}
return (pkt);
}
struct scsi_pkt *
int (*callback)())
{
}
}
return (pkt);
}
struct scsi_pkt *
{
}
}
return (new_pkt);
}
/*
* Generic Resource Deallocation Routines
*/
void
{
if (scsi_callback_id != 0) {
}
}
void
{
}
void
{
if (scsi_callback_id != 0) {
}
}