Home | History | Annotate | Line # | Download | only in ic
      1 /*	$NetBSD: cissvar.h,v 1.11 2020/07/15 14:33:58 jdolecek Exp $	*/
      2 /*	$OpenBSD: cissvar.h,v 1.15 2013/05/30 16:15:02 deraadt Exp $	*/
      3 
      4 /*
      5  * Copyright (c) 2005,2006 Michael Shalayeff
      6  * All rights reserved.
      7  *
      8  * Permission to use, copy, modify, and distribute this software for any
      9  * purpose with or without fee is hereby granted, provided that the above
     10  * copyright notice and this permission notice appear in all copies.
     11  *
     12  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
     13  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
     14  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
     15  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
     16  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
     17  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
     18  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
     19  */
     20 
     21 #include <sys/mutex.h>
     22 #include <sys/condvar.h>
     23 
     24 #include <dev/sysmon/sysmonvar.h>
     25 #include <sys/envsys.h>
     26 
     27 #include "opt_ciss.h"
     28 
     29 struct ciss_ld {
     30 	struct ciss_blink bling;	/* a copy of blink state */
     31 	char	xname[16];		/* copy of the sdN name */
     32 	int	ndrives;
     33 	u_int8_t tgts[1];
     34 };
     35 
     36 struct ciss_softc {
     37 	/* Generic device info. */
     38 	device_t		sc_dev;
     39 	kmutex_t		sc_mutex;
     40 	kmutex_t		sc_mutex_scratch;
     41 	bus_space_handle_t	sc_ioh;
     42 	bus_space_tag_t		sc_iot;
     43 	bus_dma_tag_t		sc_dmat;
     44 	void			*sc_ih;
     45 	void			*sc_sh;		/* shutdown hook */
     46 	struct proc		*sc_thread;
     47 	int			sc_flush;
     48 
     49 	struct scsipi_channel	sc_channel;
     50 	struct scsipi_adapter	sc_adapter;
     51 	struct callout		sc_hb;
     52 
     53 	u_int	sc_flags;
     54 	int ccblen, maxcmd, maxsg, nbus, ndrives, maxunits;
     55 	ciss_queue_head		sc_free_ccb;
     56 	kcondvar_t		sc_condvar;
     57 
     58 	bus_dmamap_t		cmdmap;
     59 	bus_dma_segment_t	cmdseg[1];
     60 	void *			ccbs;
     61 	void			*scratch;
     62 	u_int			sc_waitflag;
     63 
     64 	bus_space_handle_t	cfg_ioh;
     65 
     66 	struct ciss_perf_config	perfcfg;
     67 	bus_dmamap_t		replymap;
     68 	bus_dma_segment_t	replyseg[1];
     69 	uint64_t		*perf_reply;
     70 	int			perf_rqidx, perf_cycle;
     71 #define	CISS_IS_PERF(sc)	((sc)->perf_reply != NULL)
     72 
     73 	int fibrillation;
     74 	struct ciss_config cfg;
     75 #define CISS_PERF_SUPPORTED(sc)	((sc)->cfg.methods & CISS_METH_PERF)
     76 	int cfgoff;
     77 	u_int32_t iem;
     78 	u_int32_t heartbeat;
     79 	struct ciss_ld **sc_lds;
     80 
     81 	/* scsi ioctl from sd device */
     82 	int			(*sc_ioctl)(device_t, u_long, void *);
     83 
     84 	struct sysmon_envsys    *sc_sme;
     85 	envsys_data_t		*sc_sensor;
     86 };
     87 
     88 struct ciss_rawsoftc {
     89 	struct ciss_softc *sc_softc;
     90 	u_int8_t	sc_channel;
     91 };
     92 
     93 int	ciss_attach(struct ciss_softc *sc);
     94 int	ciss_intr_simple_intx(void *v);
     95 int	ciss_intr_perf_intx(void *v);
     96 int	ciss_intr_perf_msi(void *v);
     97