Home | History | Annotate | Line # | Download | only in dev
psychovar.h revision 1.11.2.3
      1  1.11.2.3     skrll /*	$NetBSD: psychovar.h,v 1.11.2.3 2004/09/21 13:22:42 skrll Exp $	*/
      2       1.1       mrg 
      3       1.1       mrg /*
      4       1.2       mrg  * Copyright (c) 1999, 2000 Matthew R. Green
      5       1.1       mrg  * All rights reserved.
      6       1.1       mrg  *
      7       1.1       mrg  * Redistribution and use in source and binary forms, with or without
      8       1.1       mrg  * modification, are permitted provided that the following conditions
      9       1.1       mrg  * are met:
     10       1.1       mrg  * 1. Redistributions of source code must retain the above copyright
     11       1.1       mrg  *    notice, this list of conditions and the following disclaimer.
     12       1.1       mrg  * 2. Redistributions in binary form must reproduce the above copyright
     13       1.1       mrg  *    notice, this list of conditions and the following disclaimer in the
     14       1.1       mrg  *    documentation and/or other materials provided with the distribution.
     15       1.1       mrg  * 3. The name of the author may not be used to endorse or promote products
     16       1.1       mrg  *    derived from this software without specific prior written permission.
     17       1.1       mrg  *
     18       1.1       mrg  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19       1.1       mrg  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20       1.1       mrg  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21       1.1       mrg  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22       1.1       mrg  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     23       1.1       mrg  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     24       1.1       mrg  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     25       1.1       mrg  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     26       1.1       mrg  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     27       1.1       mrg  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     28       1.1       mrg  * SUCH DAMAGE.
     29       1.1       mrg  */
     30       1.1       mrg 
     31       1.1       mrg #ifndef _SPARC64_DEV_PSYCHOVAR_H_
     32       1.1       mrg #define _SPARC64_DEV_PSYCHOVAR_H_
     33       1.1       mrg 
     34      1.10    martin #include <dev/sysmon/sysmonvar.h>
     35      1.10    martin 
     36       1.1       mrg /* per real PCI bus info */
     37       1.1       mrg struct psycho_softc;
     38       1.1       mrg 
     39       1.1       mrg struct psycho_pbm {
     40       1.1       mrg 	/* link to mum */
     41       1.1       mrg 	struct psycho_softc		*pp_sc;
     42       1.1       mrg 
     43       1.1       mrg 	/*
     44       1.1       mrg 	 * note that the sabre really only has one ranges property,
     45       1.1       mrg 	 * used for both simba a and simba b (but the ranges for
     46       1.1       mrg 	 * real psychos are the same for PCI A and PCI B anyway).
     47       1.1       mrg 	 */
     48       1.1       mrg 	struct psycho_registers		*pp_regs;
     49       1.1       mrg 	struct psycho_ranges		*pp_range;
     50       1.1       mrg 
     51       1.1       mrg 	/* counts of above */
     52       1.1       mrg 	int				pp_nregs;
     53       1.1       mrg 	int				pp_nrange;
     54       1.1       mrg 	int				pp_nintmap;
     55       1.1       mrg 
     56       1.9  nakayama 	/* extents for free bus space */
     57       1.9  nakayama 	struct extent			*pp_exmem;
     58       1.9  nakayama 	struct extent			*pp_exio;
     59       1.9  nakayama 
     60  1.11.2.1     skrll 	/* PCI Bus Module A or PCI Bus Module B */
     61  1.11.2.1     skrll 	int				pp_id;
     62  1.11.2.1     skrll #define PSYCHO_PBM_UNKNOWN	0
     63  1.11.2.1     skrll #define PSYCHO_PBM_A		1
     64  1.11.2.1     skrll #define PSYCHO_PBM_B		2
     65  1.11.2.1     skrll 
     66       1.1       mrg 	/* chipset tag for this instance */
     67       1.1       mrg 	pci_chipset_tag_t		pp_pc;
     68       1.1       mrg 
     69       1.1       mrg 	/* our tags */
     70       1.1       mrg 	bus_space_tag_t			pp_memt;
     71       1.1       mrg 	bus_space_tag_t			pp_iot;
     72       1.1       mrg 	bus_dma_tag_t			pp_dmat;
     73       1.3       eeh 	int				pp_bus;
     74       1.9  nakayama 	int				pp_busmax;
     75       1.9  nakayama 	struct pp_busnode {
     76       1.9  nakayama 		int	node;
     77       1.9  nakayama 		int	(*valid) __P((void *));
     78       1.9  nakayama 		void	*arg;
     79       1.9  nakayama 	}				(*pp_busnode)[256];
     80       1.1       mrg 	int				pp_flags;
     81       1.1       mrg 
     82       1.1       mrg 	/* and pointers into the psycho regs for our bits */
     83       1.7       eeh 	bus_space_handle_t		pp_pcictl;
     84       1.8       eeh 	struct strbuf_ctl		pp_sb;
     85       1.8       eeh 	/* area we can use for flushing our streaming buffer */
     86       1.8       eeh 	char				pp_flush[0x80];
     87       1.1       mrg };
     88       1.1       mrg 
     89       1.1       mrg /*
     90       1.1       mrg  * per-PCI bus on mainbus softc structure; one for sabre, or two
     91       1.1       mrg  * per pair of psycho's.
     92       1.1       mrg  */
     93       1.1       mrg struct psycho_softc {
     94       1.1       mrg 	struct	device			sc_dev;
     95       1.1       mrg 
     96       1.1       mrg 	/*
     97       1.1       mrg 	 * one sabre has two simba's.  psycho's are separately attached,
     98       1.1       mrg 	 * with the `other' psycho_pbm allocated at the first's attach.
     99       1.1       mrg 	 */
    100       1.1       mrg 	struct psycho_pbm		*__sc_psycho_this;
    101       1.1       mrg 	struct psycho_pbm		*__sc_psycho_other;
    102       1.1       mrg #define	sc_psycho_this	__sc_psycho_this
    103       1.1       mrg #define	sc_psycho_other	__sc_psycho_other
    104       1.1       mrg 
    105       1.1       mrg 	/*
    106       1.1       mrg 	 * PSYCHO register.  we record the base physical address of these
    107       1.1       mrg 	 * also as it is the base of the entire PSYCHO
    108       1.1       mrg 	 */
    109       1.1       mrg 	struct psychoreg		*sc_regs;
    110       1.1       mrg 	paddr_t				sc_basepaddr;
    111       1.1       mrg 
    112       1.4        pk 	/* Interrupt Group Number for this device */
    113       1.4        pk 	int				sc_ign;
    114       1.4        pk 
    115       1.1       mrg 	/* our tags (from parent) */
    116       1.1       mrg 	bus_space_tag_t			sc_bustag;
    117       1.7       eeh 	bus_dma_tag_t			sc_dmatag;
    118       1.7       eeh 
    119       1.7       eeh 	bus_space_handle_t		sc_bh;
    120       1.1       mrg 
    121       1.1       mrg 	/* config space */
    122       1.1       mrg 	bus_space_tag_t			sc_configtag;
    123       1.3       eeh 	bus_space_handle_t		sc_configaddr;
    124       1.1       mrg 
    125       1.1       mrg 	int				sc_clockfreq;
    126       1.1       mrg 	int				sc_node;	/* prom node */
    127       1.1       mrg 	int				sc_mode;	/* (whatareya?) */
    128       1.1       mrg #define	PSYCHO_MODE_SABRE	1	/* i'm a sabre (yob) */
    129       1.4        pk #define	PSYCHO_MODE_PSYCHO	2	/* i'm a psycho (w*nker) */
    130       1.1       mrg 
    131       1.4        pk 	struct iommu_state		*sc_is;
    132      1.10    martin 
    133      1.10    martin 	struct sysmon_pswitch		*sc_smcontext;	/* power switch definition */
    134      1.10    martin 	int				sc_powerpressed;/* already signaled */
    135       1.1       mrg };
    136       1.9  nakayama 
    137       1.9  nakayama /* get a PCI offset address from bus_space_handle_t */
    138       1.9  nakayama bus_addr_t psycho_bus_offset __P((bus_space_tag_t, bus_space_handle_t *));
    139       1.1       mrg 
    140      1.11       wiz /* config space is per-psycho.  mem/io/DMA are per-pci bus */
    141       1.1       mrg bus_dma_tag_t psycho_alloc_dma_tag __P((struct psycho_pbm *));
    142       1.1       mrg bus_space_tag_t psycho_alloc_bus_tag __P((struct psycho_pbm *, int));
    143       1.1       mrg 
    144       1.1       mrg #define psycho_alloc_config_tag(pp) psycho_alloc_bus_tag((pp), PCI_CONFIG_BUS_SPACE)
    145       1.1       mrg #define psycho_alloc_mem_tag(pp) psycho_alloc_bus_tag((pp), PCI_MEMORY_BUS_SPACE)
    146       1.1       mrg #define psycho_alloc_io_tag(pp) psycho_alloc_bus_tag((pp), PCI_IO_BUS_SPACE)
    147       1.1       mrg 
    148       1.1       mrg #endif /* _SPARC64_DEV_PSYCHOVAR_H_ */
    149