The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/ic/aic79xx_openbsd.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $OpenBSD: aic79xx_openbsd.h,v 1.21 2020/07/28 21:33:14 krw 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/queue.h>
   78 
   79 #define AIC_PCI_CONFIG 1
   80 #include <dev/pci/pcireg.h>
   81 #include <dev/pci/pcivar.h>
   82 
   83 #include <machine/bus.h>
   84 #include <machine/intr.h>
   85 
   86 #include <scsi/scsi_all.h>
   87 #include <scsi/scsi_message.h>
   88 #include <scsi/scsiconf.h>
   89 
   90 #include <uvm/uvm_extern.h>
   91 
   92 #ifdef DEBUG
   93 #define bootverbose     1
   94 #else
   95 #define bootverbose     0
   96 #endif
   97 /****************************** Platform Macros *******************************/
   98 #define SCSI_IS_SCSIBUS_B(ahd, sc_link) \
   99         (0)
  100 #define SCSI_CHANNEL(ahd, sc_link)      \
  101         ('A')
  102 #define SCSI_SCSI_ID(ahd, sc_link)      \
  103         (ahd->our_id)
  104 #define BUILD_SCSIID(ahd, sc_link, target_id, our_id) \
  105         ((((target_id) << TID_SHIFT) & TID) | (our_id))
  106 
  107 #ifndef offsetof
  108 #define offsetof(type, member)  ((size_t)(&((type *)0)->member))
  109 #endif
  110 
  111 /************************* Forward Declarations *******************************/
  112 typedef struct pci_attach_args * ahd_dev_softc_t;
  113 
  114 /***************************** Bus Space/DMA **********************************/
  115 
  116 /* XXX Need to update Bus DMA for partial map syncs */
  117 #define ahd_dmamap_sync(ahc, dma_tag, dmamap, offset, len, op)          \
  118         bus_dmamap_sync(dma_tag, dmamap, offset, len, op)
  119 
  120 /************************ Tunable Driver Parameters  **************************/
  121 /*
  122  * The number of dma segments supported.  The sequencer can handle any number
  123  * of physically contiguous S/G entries.  To reduce the driver's memory
  124  * consumption, we limit the number supported to be sufficient to handle
  125  * the largest mapping supported by the kernel, MAXPHYS.  Assuming the
  126  * transfer is as fragmented as possible and unaligned, this turns out to
  127  * be the number of paged sized transfers in MAXPHYS plus an extra element
  128  * to handle any unaligned residual.  The sequencer fetches SG elements
  129  * in cacheline sized chucks, so make the number per-transaction an even
  130  * multiple of 16 which should align us on even the largest of cacheline
  131  * boundaries.
  132  */
  133 #define AHD_NSEG (roundup(atop(MAXPHYS) + 1, 16))
  134 
  135 /* This driver supports target mode */
  136 // #define AHD_TARGET_MODE 1
  137 
  138 /************************** Timer DataStructures ******************************/
  139 typedef struct timeout aic_timer_t;
  140 
  141 /***************************** Core Includes **********************************/
  142 
  143 #if AHD_REG_PRETTY_PRINT
  144 #define AIC_DEBUG_REGISTERS 1
  145 #else
  146 #define AIC_DEBUG_REGISTERS 0
  147 #endif
  148 #include <dev/ic/aic79xx.h>
  149 
  150 /***************************** Timer Facilities *******************************/
  151 void ahd_timeout(void*);
  152 void aic_timer_reset(aic_timer_t *, u_int, ahd_callback_t *, void *);
  153 void aic_scb_timer_reset(struct scb *, u_int);
  154 
  155 #define aic_timer_stop timeout_del
  156 #define aic_get_timeout(scb) ((scb)->xs->timeout)
  157 /*************************** Device Access ************************************/
  158 #define ahd_inb(ahd, port)                                      \
  159         bus_space_read_1((ahd)->tags[(port) >> 8],              \
  160                          (ahd)->bshs[(port) >> 8], (port) & 0xFF)
  161 
  162 #define ahd_outb(ahd, port, value)                              \
  163         bus_space_write_1((ahd)->tags[(port) >> 8],             \
  164                           (ahd)->bshs[(port) >> 8], (port) & 0xFF, value)
  165 
  166 #define ahd_inw_atomic(ahd, port)                               \
  167         aic_le16toh(bus_space_read_2((ahd)->tags[(port) >> 8],  \
  168                                      (ahd)->bshs[(port) >> 8], (port) & 0xFF))
  169 
  170 #define ahd_outw_atomic(ahd, port, value)                       \
  171         bus_space_write_2((ahd)->tags[(port) >> 8],             \
  172                           (ahd)->bshs[(port) >> 8],             \
  173                           (port & 0xFF), aic_htole16(value))
  174 
  175 #define ahd_outsb(ahd, port, valp, count)                       \
  176         bus_space_write_multi_1((ahd)->tags[(port) >> 8],       \
  177                                 (ahd)->bshs[(port) >> 8],       \
  178                                 (port & 0xFF), valp, count)
  179 
  180 #define ahd_insb(ahd, port, valp, count)                        \
  181         bus_space_read_multi_1((ahd)->tags[(port) >> 8],        \
  182                                (ahd)->bshs[(port) >> 8],        \
  183                                (port & 0xFF), valp, count)
  184 
  185 void ahd_flush_device_writes(struct ahd_softc *);
  186 
  187 /**************************** Locking Primitives ******************************/
  188 /* Lock protecting internal data structures */
  189 #define ahd_lockinit(ahd)
  190 #define ahd_lock(ahd, flags) *(flags) = splbio()
  191 #define ahd_unlock(ahd, flags) splx(*(flags))
  192 
  193 /* Lock held during command completion to the upper layer */
  194 #define ahd_done_lockinit(ahd)
  195 #define ahd_done_lock(ahd, flags)
  196 #define ahd_done_unlock(ahd, flags)
  197 
  198 /* Lock held during ahd_list manipulation and ahd softc frees */
  199 #define ahd_list_lockinit(x)
  200 #define ahd_list_lock(flags) *(flags) = splbio()
  201 #define ahd_list_unlock(flags) splx(*(flags))
  202 
  203 /****************************** OS Primitives *********************************/
  204 #define scsi_4btoul(b)  (_4btol(b))
  205 
  206 /************************** Transaction Operations ****************************/
  207 #define aic_set_transaction_status(scb, status) (scb)->xs->error = (status)
  208 #define aic_set_scsi_status(scb, status) (scb)->xs->xs_status = (status)
  209 #define aic_set_transaction_tag(scb, enabled, type)
  210 #define aic_set_residual(scb, residual) (scb)->xs->resid = (residual)
  211 #define aic_set_sense_residual(scb, residual) (scb)->xs->resid = (residual)
  212 
  213 #define aic_get_transaction_status(scb) \
  214         (((scb)->xs->flags & ITSDONE) ? CAM_REQ_CMP : (scb)->xs->error)
  215 #define aic_get_scsi_status(scb) ((scb)->xs->status)
  216 #define aic_get_transfer_length(scb) ((scb)->xs->datalen)
  217 #define aic_get_transfer_dir(scb) \
  218         ((scb)->xs->flags & (SCSI_DATA_IN | SCSI_DATA_OUT))
  219 #define aic_get_residual(scb) ((scb)->xs->resid)
  220 #define aic_get_sense_bufsize(ahd, scb) (sizeof(struct scsi_sense_data))
  221 
  222 #define aic_perform_autosense(scb) (1)
  223 
  224 #define aic_freeze_simq(ahd)
  225 #define aic_release_simq(ahd)
  226 #define aic_freeze_scb(scb)
  227 
  228 void aic_platform_scb_free(struct ahd_softc *, struct scb *);
  229 
  230 /********************************** PCI ***************************************/
  231 /*#if AHD_PCI_CONFIG > 0*/
  232 #define aic_get_pci_function(pci) ((pci)->pa_function)
  233 #define aic_get_pci_slot(pci) ((pci)->pa_device)
  234 #define aic_get_pci_bus(pci) ((pci)->pa_bus)
  235 
  236 int                     ahd_pci_map_registers(struct ahd_softc *);
  237 int                     ahd_pci_map_int(struct ahd_softc *);
  238 /*#endif*/
  239 
  240 typedef enum
  241 {
  242         AHD_POWER_STATE_D0,
  243         AHD_POWER_STATE_D1,
  244         AHD_POWER_STATE_D2,
  245         AHD_POWER_STATE_D3
  246 } ahd_power_state;
  247 
  248 void ahd_power_state_change(struct ahd_softc *, ahd_power_state);
  249 
  250 /********************************* Debug **************************************/
  251 void    ahd_print_path(struct ahd_softc *, struct scb *);
  252 void    ahd_platform_dump_card_state(struct ahd_softc *ahd);
  253 
  254 /**************************** Transfer Settings *******************************/
  255 void      ahd_notify_xfer_settings_change(struct ahd_softc *,
  256                                           struct ahd_devinfo *);
  257 void      ahd_platform_set_tags(struct ahd_softc *, struct ahd_devinfo *,
  258                                 ahd_queue_alg);
  259 
  260 /************************* Initialization/Teardown ****************************/
  261 int       ahd_attach(struct ahd_softc *);
  262 int       ahd_softc_comp(struct ahd_softc *lahd, struct ahd_softc *rahd);
  263 int       ahd_detach(struct device *, int);
  264 
  265 /****************************** Interrupts ************************************/
  266 int                     ahd_platform_intr(void *);
  267 
  268 /************************ Misc Function Declarations **************************/
  269 void      ahd_done(struct ahd_softc *, struct scb *);
  270 void      ahd_send_async(struct ahd_softc *, char /*channel*/,
  271                          u_int /*target*/, u_int /*lun*/, ac_code, void *arg);
  272 #endif  /* _AIC79XX_OPENBSD_H_ */

Cache object: 2f51e5ac7aa62117d40788fea9eb75e7


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.