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) | |
download | src-test2-9c5a11488681b049d796ee42634d21a7bd436adf.tar.gz src-test2-9c5a11488681b049d796ee42634d21a7bd436adf.zip |
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 daf088901a2e..eb65969bc93d 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 809ca2a8b943..c6c1776de71a 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 36def7034af5..000000000000 --- 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_ */ |