[BACK]Return to aic79xx_openbsd.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/aic79xx_openbsd.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: aic79xx_openbsd.h,v 1.16 2005/12/10 11:45:43 miod Exp $       */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Redistribution and use in source and binary forms, with or without
        !             8:  * modification, are permitted provided that the following conditions
        !             9:  * are met:
        !            10:  * 1. Redistributions of source code must retain the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer.
        !            12:  * 2. Redistributions in binary form must reproduce the above copyright
        !            13:  *    notice, this list of conditions and the following disclaimer in the
        !            14:  *    documentation and/or other materials provided with the distribution.
        !            15:  *
        !            16:  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
        !            17:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            18:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            19:  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR
        !            20:  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            21:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            22:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            23:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            24:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            25:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            26:  * SUCH DAMAGE.
        !            27:  *
        !            28:  */
        !            29:
        !            30: /*
        !            31:  * FreeBSD platform specific driver option settings, data structures,
        !            32:  * function declarations and includes.
        !            33:  *
        !            34:  * Copyright (c) 1994-2001 Justin T. Gibbs.
        !            35:  * Copyright (c) 2001-2002 Adaptec Inc.
        !            36:  * All rights reserved.
        !            37:  *
        !            38:  * Redistribution and use in source and binary forms, with or without
        !            39:  * modification, are permitted provided that the following conditions
        !            40:  * are met:
        !            41:  * 1. Redistributions of source code must retain the above copyright
        !            42:  *    notice, this list of conditions, and the following disclaimer,
        !            43:  *    without modification.
        !            44:  * 2. The name of the author may not be used to endorse or promote products
        !            45:  *    derived from this software without specific prior written permission.
        !            46:  *
        !            47:  * Alternatively, this software may be distributed under the terms of the
        !            48:  * GNU Public License ("GPL").
        !            49:  *
        !            50:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
        !            51:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !            52:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !            53:  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
        !            54:  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !            55:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !            56:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            57:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !            58:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !            59:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !            60:  * SUCH DAMAGE.
        !            61:  *
        !            62:  * $FreeBSD: src/sys/dev/aic7xxx/aic79xx_osm.h,v 1.13 2003/12/17 00:02:09 gibbs Exp $
        !            63:  *
        !            64:  */
        !            65:
        !            66: #ifndef _AIC79XX_OPENBSD_H_
        !            67: #define _AIC79XX_OPENBSD_H_
        !            68:
        !            69: #include "pci.h"               /* for config options */
        !            70:
        !            71: #include <sys/param.h>
        !            72: #include <sys/kernel.h>
        !            73: #include <sys/systm.h>
        !            74: #include <sys/device.h>
        !            75: #include <sys/malloc.h>
        !            76: #include <sys/buf.h>
        !            77: #include <sys/proc.h>
        !            78: #include <sys/queue.h>
        !            79:
        !            80: #define AIC_PCI_CONFIG 1
        !            81: #include <dev/pci/pcireg.h>
        !            82: #include <dev/pci/pcivar.h>
        !            83:
        !            84: #include <machine/bus.h>
        !            85: #include <machine/intr.h>
        !            86:
        !            87: #include <scsi/scsi_all.h>
        !            88: #include <scsi/scsi_message.h>
        !            89: #include <scsi/scsi_debug.h>
        !            90: #include <scsi/scsiconf.h>
        !            91:
        !            92: #include <uvm/uvm_extern.h>
        !            93:
        !            94: #ifdef DEBUG
        !            95: #define bootverbose     1
        !            96: #else
        !            97: #define bootverbose     0
        !            98: #endif
        !            99: /****************************** Platform Macros *******************************/
        !           100: #define        SCSI_IS_SCSIBUS_B(ahd, sc_link) \
        !           101:        (0)
        !           102: #define        SCSI_CHANNEL(ahd, sc_link)      \
        !           103:        ('A')
        !           104: #define        SCSI_SCSI_ID(ahd, sc_link)      \
        !           105:        (ahd->our_id)
        !           106: #define BUILD_SCSIID(ahd, sc_link, target_id, our_id) \
        !           107:        ((((target_id) << TID_SHIFT) & TID) | (our_id))
        !           108:
        !           109: #ifndef offsetof
        !           110: #define offsetof(type, member)  ((size_t)(&((type *)0)->member))
        !           111: #endif
        !           112:
        !           113: /************************* Forward Declarations *******************************/
        !           114: typedef struct pci_attach_args * ahd_dev_softc_t;
        !           115:
        !           116: /***************************** Bus Space/DMA **********************************/
        !           117:
        !           118: /* XXX Need to update Bus DMA for partial map syncs */
        !           119: #define ahd_dmamap_sync(ahc, dma_tag, dmamap, offset, len, op)         \
        !           120:        bus_dmamap_sync(dma_tag, dmamap, offset, len, op)
        !           121:
        !           122: /************************ Tunable Driver Parameters  **************************/
        !           123: /*
        !           124:  * The number of dma segments supported.  The sequencer can handle any number
        !           125:  * of physically contiguous S/G entries.  To reduce the driver's memory
        !           126:  * consumption, we limit the number supported to be sufficient to handle
        !           127:  * the largest mapping supported by the kernel, MAXPHYS.  Assuming the
        !           128:  * transfer is as fragmented as possible and unaligned, this turns out to
        !           129:  * be the number of paged sized transfers in MAXPHYS plus an extra element
        !           130:  * to handle any unaligned residual.  The sequencer fetches SG elements
        !           131:  * in cacheline sized chucks, so make the number per-transaction an even
        !           132:  * multiple of 16 which should align us on even the largest of cacheline
        !           133:  * boundaries.
        !           134:  */
        !           135: #define AHD_NSEG (roundup(btoc(MAXPHYS) + 1, 16))
        !           136:
        !           137: /* This driver supports target mode */
        !           138: // #define AHD_TARGET_MODE 1
        !           139:
        !           140: /************************** Softc/SCB Platform Data ***************************/
        !           141: struct ahd_platform_data {
        !           142: };
        !           143:
        !           144: struct scb_platform_data {
        !           145: };
        !           146:
        !           147: /************************** Timer DataStructures ******************************/
        !           148: typedef struct timeout aic_timer_t;
        !           149:
        !           150: /***************************** Core Includes **********************************/
        !           151:
        !           152: #if AHD_REG_PRETTY_PRINT
        !           153: #define AIC_DEBUG_REGISTERS 1
        !           154: #else
        !           155: #define AIC_DEBUG_REGISTERS 0
        !           156: #endif
        !           157: #include <dev/ic/aic79xx.h>
        !           158:
        !           159: /***************************** Timer Facilities *******************************/
        !           160: void ahd_timeout(void*);
        !           161: void aic_timer_reset(aic_timer_t *, u_int, ahd_callback_t *, void *);
        !           162: void aic_scb_timer_reset(struct scb *, u_int);
        !           163:
        !           164: #define aic_timer_stop timeout_del
        !           165: #define aic_get_timeout(scb) ((scb)->xs->timeout)
        !           166: /*************************** Device Access ************************************/
        !           167: #define ahd_inb(ahd, port)                                     \
        !           168:        bus_space_read_1((ahd)->tags[(port) >> 8],              \
        !           169:                         (ahd)->bshs[(port) >> 8], (port) & 0xFF)
        !           170:
        !           171: #define ahd_outb(ahd, port, value)                             \
        !           172:        bus_space_write_1((ahd)->tags[(port) >> 8],             \
        !           173:                          (ahd)->bshs[(port) >> 8], (port) & 0xFF, value)
        !           174:
        !           175: #define ahd_inw_atomic(ahd, port)                              \
        !           176:        aic_le16toh(bus_space_read_2((ahd)->tags[(port) >> 8],  \
        !           177:                                     (ahd)->bshs[(port) >> 8], (port) & 0xFF))
        !           178:
        !           179: #define ahd_outw_atomic(ahd, port, value)                      \
        !           180:        bus_space_write_2((ahd)->tags[(port) >> 8],             \
        !           181:                          (ahd)->bshs[(port) >> 8],             \
        !           182:                          (port & 0xFF), aic_htole16(value))
        !           183:
        !           184: #define ahd_outsb(ahd, port, valp, count)                      \
        !           185:        bus_space_write_multi_1((ahd)->tags[(port) >> 8],       \
        !           186:                                (ahd)->bshs[(port) >> 8],       \
        !           187:                                (port & 0xFF), valp, count)
        !           188:
        !           189: #define ahd_insb(ahd, port, valp, count)                       \
        !           190:        bus_space_read_multi_1((ahd)->tags[(port) >> 8],        \
        !           191:                               (ahd)->bshs[(port) >> 8],        \
        !           192:                               (port & 0xFF), valp, count)
        !           193:
        !           194: void ahd_flush_device_writes(struct ahd_softc *);
        !           195:
        !           196: /**************************** Locking Primitives ******************************/
        !           197: /* Lock protecting internal data structures */
        !           198: #define ahd_lockinit(ahd)
        !           199: #define ahd_lock(ahd, flags) *(flags) = splbio()
        !           200: #define ahd_unlock(ahd, flags) splx(*(flags))
        !           201:
        !           202: /* Lock held during command completion to the upper layer */
        !           203: #define ahd_done_lockinit(ahd)
        !           204: #define ahd_done_lock(ahd, flags)
        !           205: #define ahd_done_unlock(ahd, flags)
        !           206:
        !           207: /* Lock held during ahd_list manipulation and ahd softc frees */
        !           208: #define ahd_list_lockinit(x)
        !           209: #define ahd_list_lock(flags) *(flags) = splbio()
        !           210: #define ahd_list_unlock(flags) splx(*(flags))
        !           211:
        !           212: /****************************** OS Primitives *********************************/
        !           213: #define scsi_4btoul(b) (_4btol(b))
        !           214:
        !           215: /************************** Transaction Operations ****************************/
        !           216: #define aic_set_transaction_status(scb, status) (scb)->xs->error = (status)
        !           217: #define aic_set_scsi_status(scb, status) (scb)->xs->xs_status = (status)
        !           218: #define aic_set_transaction_tag(scb, enabled, type)
        !           219: #define aic_set_residual(scb, residual) (scb)->xs->resid = (residual)
        !           220: #define aic_set_sense_residual(scb, residual) (scb)->xs->resid = (residual)
        !           221:
        !           222: #define aic_get_transaction_status(scb) \
        !           223:        (((scb)->xs->flags & ITSDONE) ? CAM_REQ_CMP : (scb)->xs->error)
        !           224: #define aic_get_scsi_status(scb) ((scb)->xs->status)
        !           225: #define aic_get_transfer_length(scb) ((scb)->xs->datalen)
        !           226: #define aic_get_transfer_dir(scb) \
        !           227:        ((scb)->xs->flags & (SCSI_DATA_IN | SCSI_DATA_OUT))
        !           228: #define aic_get_residual(scb) ((scb)->xs->resid)
        !           229: #define aic_get_sense_bufsize(ahd, scb) (sizeof(struct scsi_sense_data))
        !           230:
        !           231: #define aic_perform_autosense(scb) (1)
        !           232:
        !           233: #define aic_freeze_simq(ahd)
        !           234: #define aic_release_simq(ahd)
        !           235: #define aic_freeze_scb(scb)
        !           236: #define ahd_platform_freeze_devq(ahd, scb)
        !           237: #define ahd_platform_abort_scbs(ahd, target, channel, lun, tag, role, status)
        !           238:
        !           239: void aic_platform_scb_free(struct ahd_softc *, struct scb *);
        !           240:
        !           241: /********************************** PCI ***************************************/
        !           242: /*#if AHD_PCI_CONFIG > 0*/
        !           243: #define aic_get_pci_function(pci) ((pci)->pa_function)
        !           244: #define aic_get_pci_slot(pci) ((pci)->pa_device)
        !           245: #define aic_get_pci_bus(pci) ((pci)->pa_bus)
        !           246:
        !           247: int                    ahd_pci_map_registers(struct ahd_softc *);
        !           248: int                    ahd_pci_map_int(struct ahd_softc *);
        !           249: /*#endif*/
        !           250:
        !           251: typedef enum
        !           252: {
        !           253:        AHD_POWER_STATE_D0,
        !           254:        AHD_POWER_STATE_D1,
        !           255:        AHD_POWER_STATE_D2,
        !           256:        AHD_POWER_STATE_D3
        !           257: } ahd_power_state;
        !           258:
        !           259: void ahd_power_state_change(struct ahd_softc *, ahd_power_state);
        !           260:
        !           261: /********************************* Debug **************************************/
        !           262: void   ahd_print_path(struct ahd_softc *, struct scb *);
        !           263: void   ahd_platform_dump_card_state(struct ahd_softc *ahd);
        !           264:
        !           265: /**************************** Transfer Settings *******************************/
        !           266: void     ahd_notify_xfer_settings_change(struct ahd_softc *,
        !           267:                                          struct ahd_devinfo *);
        !           268: void     ahd_platform_set_tags(struct ahd_softc *, struct ahd_devinfo *,
        !           269:                                ahd_queue_alg);
        !           270:
        !           271: /************************* Initialization/Teardown ****************************/
        !           272: int      ahd_platform_alloc(struct ahd_softc *, void *);
        !           273: void     ahd_platform_free(struct ahd_softc *);
        !           274: int      ahd_attach(struct ahd_softc *);
        !           275: int      ahd_softc_comp(struct ahd_softc *lahd, struct ahd_softc *rahd);
        !           276: int      ahd_detach(struct device *, int);
        !           277:
        !           278: #define        ahd_platform_init(ahd)
        !           279:
        !           280: /****************************** Interrupts ************************************/
        !           281: int                    ahd_platform_intr(void *);
        !           282: void   ahd_platform_flushwork(struct ahd_softc *ahd);
        !           283: /************************ Misc Function Declarations **************************/
        !           284: void     ahd_done(struct ahd_softc *, struct scb *);
        !           285: void     ahd_send_async(struct ahd_softc *, char /*channel*/,
        !           286:                         u_int /*target*/, u_int /*lun*/, ac_code, void *arg);
        !           287: #endif  /* _AIC79XX_OPENBSD_H_ */

CVSweb