root/dev/ic/aic79xx_openbsd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. AHD_POWER_STATE_D0
  2. AHD_POWER_STATE_D1
  3. AHD_POWER_STATE_D2
  4. AHD_POWER_STATE_D3
  5. ahd_power_state

    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_ */

/* [<][>][^][v][top][bottom][index][help] */