diff options
| author | Warner Losh <imp@FreeBSD.org> | 2018-01-09 16:11:33 +0000 | 
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 2018-01-09 16:11:33 +0000 | 
| commit | 9c5a11488681b049d796ee42634d21a7bd436adf (patch) | |
| tree | f03dede49345928b7974efca42d68cce0626d29e | |
| parent | 8ab09f8a4e7e47cc83bcec1b599741f53c6b6172 (diff) | |
Notes
| -rw-r--r-- | sys/cam/scsi/scsi_low.c | 59 | ||||
| -rw-r--r-- | sys/cam/scsi/scsi_low.h | 56 | ||||
| -rw-r--r-- | sys/i386/isa/ccbque.h | 124 | 
3 files changed, 114 insertions, 125 deletions
diff --git a/sys/cam/scsi/scsi_low.c b/sys/cam/scsi/scsi_low.c index daf088901a2e4..eb65969bc93dd 100644 --- a/sys/cam/scsi/scsi_low.c +++ b/sys/cam/scsi/scsi_low.c @@ -88,6 +88,65 @@ __FBSDID("$FreeBSD$");  #include <sys/cons.h>  /************************************************************** + * CCB Macros + **************************************************************/ + +/* (II)  static allocated memory */ +#define GENERIC_CCB_STATIC_ALLOC(DEV, CCBTYPE)				\ +static struct CCBTYPE##que CCBTYPE##que; + +/* (III)  functions */ +#define GENERIC_CCB(DEV, CCBTYPE, CHAIN)				\ +									\ +void									\ +DEV##_init_ccbque(int count)						\ +{									\ +	if (CCBTYPE##que.maxccb == 0)					\ +		TAILQ_INIT(&CCBTYPE##que.CCBTYPE##tab);			\ +	CCBTYPE##que.maxccb += count;					\ +}									\ +									\ +struct CCBTYPE *							\ +DEV##_get_ccb(void)							\ +{									\ +	struct CCBTYPE *cb;						\ +									\ +	if (CCBTYPE##que.count < CCBTYPE##que.maxccb)			\ +	{								\ +		CCBTYPE##que.count ++;					\ +		cb = TAILQ_FIRST(&(CCBTYPE##que.CCBTYPE##tab));		\ +		if (cb != NULL) {					\ +			TAILQ_REMOVE(&CCBTYPE##que.CCBTYPE##tab, cb, CHAIN);\ +			goto out;					\ +		} else {						\ +			cb = malloc(sizeof(*cb), M_DEVBUF, M_NOWAIT  | M_ZERO);	\ +			if (cb != NULL)					\ +				goto out;				\ +		}							\ +		CCBTYPE##que.count --;					\ +	}								\ +									\ +	cb = NULL;							\ +									\ +out:									\ +	return cb;							\ +}									\ +									\ +void									\ +DEV##_free_ccb(struct CCBTYPE *cb)					\ +{									\ +									\ +	TAILQ_INSERT_TAIL(&CCBTYPE##que.CCBTYPE##tab, cb, CHAIN);	\ +	CCBTYPE##que.count --;						\ +									\ +	if (CCBTYPE##que.flags & CCB_MWANTED)				\ +	{								\ +		CCBTYPE##que.flags &= ~CCB_MWANTED;			\ +		wakeup ((caddr_t) &CCBTYPE##que.count);			\ +	}								\ +} + +/**************************************************************   * Constants   **************************************************************/  #define	SCSI_LOW_POLL_HZ	1000 diff --git a/sys/cam/scsi/scsi_low.h b/sys/cam/scsi/scsi_low.h index 809ca2a8b9431..c6c1776de71ae 100644 --- a/sys/cam/scsi/scsi_low.h +++ b/sys/cam/scsi/scsi_low.h @@ -57,7 +57,61 @@  #include <cam/cam_debug.h>  #include <cam/scsi/scsi_dvcfg.h> -#include <i386/isa/ccbque.h> +/************ ccbque.h ***************************/ + +/*	$NetBSD$	*/ +/*- + * SPDX-License-Identifier: BSD-3-Clause + * + * [NetBSD for NEC PC98 series] + *  Copyright (c) 1994, 1995, 1996 NetBSD/pc98 porting staff. + *  All rights reserved. + * + *  Redistribution and use in source and binary forms, with or without + *  modification, are permitted provided that the following conditions + *  are met: + *  1. Redistributions of source code must retain the above copyright + *     notice, this list of conditions and the following disclaimer. + *  2. Redistributions in binary form must reproduce the above copyright + *     notice, this list of conditions and the following disclaimer in the + *     documentation and/or other materials provided with the distribution. + *  3. The name of the author may not be used to endorse or promote products + *     derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ +/* + * Common command control queue funcs. + * Written by N. Honda. + */ + +#define	CCB_MWANTED 0x01 + +/* (I)  structure and prototype */ +#define GENERIC_CCB_ASSERT(DEV, CCBTYPE)				\ +TAILQ_HEAD(CCBTYPE##tab, CCBTYPE);					\ +struct CCBTYPE##que {							\ +	struct CCBTYPE##tab CCBTYPE##tab;				\ +	int count;							\ +	int maxccb;							\ +	u_int flags;							\ +};									\ +									\ +void DEV##_init_ccbque(int);						\ +struct CCBTYPE *DEV##_get_ccb(void);					\ +void DEV##_free_ccb(struct CCBTYPE *);  /******** functions macro ************************/ diff --git a/sys/i386/isa/ccbque.h b/sys/i386/isa/ccbque.h deleted file mode 100644 index 36def7034af5b..0000000000000 --- a/sys/i386/isa/ccbque.h +++ /dev/null @@ -1,124 +0,0 @@ -/*	$NetBSD$	*/ -/*- - * SPDX-License-Identifier: BSD-3-Clause - * - * [NetBSD for NEC PC98 series] - *  Copyright (c) 1994, 1995, 1996 NetBSD/pc98 porting staff. - *  All rights reserved. - *  - *  Redistribution and use in source and binary forms, with or without - *  modification, are permitted provided that the following conditions - *  are met: - *  1. Redistributions of source code must retain the above copyright - *     notice, this list of conditions and the following disclaimer. - *  2. Redistributions in binary form must reproduce the above copyright - *     notice, this list of conditions and the following disclaimer in the - *     documentation and/or other materials provided with the distribution. - *  3. The name of the author may not be used to endorse or promote products - *     derived from this software without specific prior written permission. - *  - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN - * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * $FreeBSD$ - */ -/* - * Common command control queue funcs. - * Written by N. Honda. - */ - -#ifndef	_CCBQUE_H_ -#define	_CCBQUE_H_ - -#define	CCB_MWANTED 0x01 -						 -/* (I)  structure and prototype */ -#define GENERIC_CCB_ASSERT(DEV, CCBTYPE)				\ -TAILQ_HEAD(CCBTYPE##tab, CCBTYPE);					\ -struct CCBTYPE##que {							\ -	struct CCBTYPE##tab CCBTYPE##tab;				\ -	int count;							\ -	int maxccb;							\ -	u_int flags;							\ -};									\ -									\ -void DEV##_init_ccbque(int);					\ -struct CCBTYPE *DEV##_get_ccb(void);				\ -void DEV##_free_ccb(struct CCBTYPE *); - -/* (II)  static allocated memory */ -#define GENERIC_CCB_STATIC_ALLOC(DEV, CCBTYPE)				\ -static struct CCBTYPE##que CCBTYPE##que; - -/* (III)  functions */ -#define GENERIC_CCB(DEV, CCBTYPE, CHAIN)				\ -									\ -void									\ -DEV##_init_ccbque(count)						\ -	int count;							\ -{									\ -	if (CCBTYPE##que.maxccb == 0)					\ -		TAILQ_INIT(&CCBTYPE##que.CCBTYPE##tab);			\ -	CCBTYPE##que.maxccb += count;					\ -}									\ -									\ -struct CCBTYPE *							\ -DEV##_get_ccb()								\ -{									\ -	struct CCBTYPE *cb;						\ -	int s = splcam();						\ -									\ -	if (CCBTYPE##que.count < CCBTYPE##que.maxccb)			\ -	{								\ -		CCBTYPE##que.count ++;					\ -		cb = TAILQ_FIRST(&(CCBTYPE##que.CCBTYPE##tab));		\ -		if (cb != NULL)						\ -		{							\ -			TAILQ_REMOVE(&CCBTYPE##que.CCBTYPE##tab, cb, CHAIN);\ -			goto out;					\ -		}							\ -		else							\ -		{							\ -			cb = malloc(sizeof(*cb), M_DEVBUF, M_NOWAIT);	\ -			if (cb != NULL)					\ -			{						\ -				bzero(cb, sizeof(*cb));			\ -				goto out;				\ -			}						\ -		}							\ -		CCBTYPE##que.count --;					\ -	}								\ -									\ -	cb = NULL;							\ -									\ -out:									\ -	splx(s);							\ -	return cb;							\ -}									\ -									\ -void									\ -DEV##_free_ccb(cb)							\ -	struct CCBTYPE *cb;						\ -{									\ -	int s = splcam();						\ -									\ -	TAILQ_INSERT_TAIL(&CCBTYPE##que.CCBTYPE##tab, cb, CHAIN);	\ -	CCBTYPE##que.count --;						\ -									\ -	if (CCBTYPE##que.flags & CCB_MWANTED)				\ -	{								\ -		CCBTYPE##que.flags &= ~CCB_MWANTED;			\ -		wakeup ((caddr_t) &CCBTYPE##que.count);			\ -	}								\ -	splx(s);							\ -} -#endif	/* !_CCBQUE_H_ */  | 
