📄 pcibr_private.h
字号:
/* $Id$ * * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright (C) 1992 - 1997, 2000 Silicon Graphics, Inc. * Copyright (C) 2000 by Colin Ngam */#ifndef _ASM_SN_PCI_PCIBR_PRIVATE_H#define _ASM_SN_PCI_PCIBR_PRIVATE_H/* * pcibr_private.h -- private definitions for pcibr * only the pcibr driver (and its closest friends) * should ever peek into this file. */#include <asm/sn/pci/pciio_private.h>#include <asm/sn/ksys/l1.h>/* * convenience typedefs */typedef uint64_t pcibr_DMattr_t;typedef uint32_t pcibr_ATEattr_t;typedef struct pcibr_info_s *pcibr_info_t, **pcibr_info_h;typedef struct pcibr_soft_s *pcibr_soft_t;typedef struct pcibr_soft_slot_s *pcibr_soft_slot_t;typedef struct pcibr_hints_s *pcibr_hints_t;typedef struct pcibr_intr_list_s *pcibr_intr_list_t;typedef struct pcibr_intr_wrap_s *pcibr_intr_wrap_t;typedef struct pcibr_intr_cbuf_s *pcibr_intr_cbuf_t;/* * Bridge sets up PIO using this information. */struct pcibr_piomap_s { struct pciio_piomap_s bp_pp; /* generic stuff */#define bp_flags bp_pp.pp_flags /* PCIBR_PIOMAP flags */#define bp_dev bp_pp.pp_dev /* associated pci card */#define bp_slot bp_pp.pp_slot /* which slot the card is in */#define bp_space bp_pp.pp_space /* which address space */#define bp_pciaddr bp_pp.pp_pciaddr /* starting offset of mapping */#define bp_mapsz bp_pp.pp_mapsz /* size of this mapping */#define bp_kvaddr bp_pp.pp_kvaddr /* kernel virtual address to use */ iopaddr_t bp_xtalk_addr; /* corresponding xtalk address */ xtalk_piomap_t bp_xtalk_pio; /* corresponding xtalk resource */ pcibr_piomap_t bp_next; /* Next piomap on the list */ pcibr_soft_t bp_soft; /* backpointer to bridge soft data */ atomic_t bp_toc[1]; /* PCI timeout counter */};/* * Bridge sets up DMA using this information. */struct pcibr_dmamap_s { struct pciio_dmamap_s bd_pd;#define bd_flags bd_pd.pd_flags /* PCIBR_DMAMAP flags */#define bd_dev bd_pd.pd_dev /* associated pci card */#define bd_slot bd_pd.pd_slot /* which slot the card is in */ struct pcibr_soft_s *bd_soft; /* pcibr soft state backptr */ xtalk_dmamap_t bd_xtalk; /* associated xtalk resources */ size_t bd_max_size; /* maximum size of mapping */ xwidgetnum_t bd_xio_port; /* target XIO port */ iopaddr_t bd_xio_addr; /* target XIO address */ iopaddr_t bd_pci_addr; /* via PCI address */ int bd_ate_index; /* Address Translation Entry Index */ int bd_ate_count; /* number of ATE's allocated */ bridge_ate_p bd_ate_ptr; /* where to write first ATE */ bridge_ate_t bd_ate_proto; /* prototype ATE (for xioaddr=0) */ bridge_ate_t bd_ate_prime; /* value of 1st ATE written */};#define IBUFSIZE 5 /* size of circular buffer (holds 4) *//* * Circular buffer used for interrupt processing */struct pcibr_intr_cbuf_s { spinlock_t ib_lock; /* cbuf 'put' lock */ int ib_in; /* index of next free entry */ int ib_out; /* index of next full entry */ pcibr_intr_wrap_t ib_cbuf[IBUFSIZE]; /* circular buffer of wrap */};/* * Bridge sets up interrupts using this information. */struct pcibr_intr_s { struct pciio_intr_s bi_pi;#define bi_flags bi_pi.pi_flags /* PCIBR_INTR flags */#define bi_dev bi_pi.pi_dev /* associated pci card */#define bi_lines bi_pi.pi_lines /* which PCI interrupt line(s) */#define bi_func bi_pi.pi_func /* handler function (when connected) */#define bi_arg bi_pi.pi_arg /* handler parameter (when connected) */#define bi_tinfo bi_pi.pi_tinfo /* Thread info (when connected) */#define bi_mustruncpu bi_pi.pi_mustruncpu /* Where we must run. */#define bi_irq bi_pi.pi_irq /* IRQ assigned. */#define bi_cpu bi_pi.pi_cpu /* cpu assigned. */ unsigned bi_ibits; /* which Bridge interrupt bit(s) */ pcibr_soft_t bi_soft; /* shortcut to soft info */ struct pcibr_intr_cbuf_s bi_ibuf; /* circular buffer of wrap ptrs */};/* * per-connect point pcibr data, including * standard pciio data in-line: */struct pcibr_info_s { struct pciio_info_s f_c; /* MUST BE FIRST. */#define f_vertex f_c.c_vertex /* back pointer to vertex */#define f_bus f_c.c_bus /* which bus the card is in */#define f_slot f_c.c_slot /* which slot the card is in */#define f_func f_c.c_func /* which func (on multi-func cards) */#define f_vendor f_c.c_vendor /* PCI card "vendor" code */#define f_device f_c.c_device /* PCI card "device" code */#define f_master f_c.c_master /* PCI bus provider */#define f_mfast f_c.c_mfast /* cached fastinfo from c_master */#define f_pops f_c.c_pops /* cached provider from c_master */#define f_efunc f_c.c_efunc /* error handling function */#define f_einfo f_c.c_einfo /* first parameter for efunc */#define f_window f_c.c_window /* state of BASE regs */#define f_rbase f_c.c_rbase /* expansion rom base */#define f_rsize f_c.c_rsize /* expansion rom size */#define f_piospace f_c.c_piospace /* additional I/O spaces allocated */ /* pcibr-specific connection state */ int f_ibit[4]; /* Bridge bit for each INTx */ pcibr_piomap_t f_piomap; int f_att_det_error;};/* ===================================================================== * Shared Interrupt Information */struct pcibr_intr_list_s { pcibr_intr_list_t il_next; pcibr_intr_t il_intr; volatile bridgereg_t *il_wrbf; /* ptr to b_wr_req_buf[] */};/* ===================================================================== * Interrupt Wrapper Data */struct pcibr_intr_wrap_s { pcibr_soft_t iw_soft; /* which bridge */ volatile bridgereg_t *iw_stat; /* ptr to b_int_status */ bridgereg_t iw_intr; /* bit in b_int_status */ pcibr_intr_list_t iw_list; /* ghostbusters! */ int iw_hdlrcnt; /* running handler count */ int iw_shared; /* if Bridge bit is shared */ int iw_connected; /* if already connected */};#define PCIBR_ISR_ERR_START 8#define PCIBR_ISR_MAX_ERRS 32/* ===================================================================== * Bridge Device State structure * * one instance of this structure is kept for each * Bridge ASIC in the system. */struct pcibr_soft_s { devfs_handle_t bs_conn; /* xtalk connection point */ devfs_handle_t bs_vhdl; /* vertex owned by pcibr */ int bs_int_enable; /* Mask of enabled intrs */ bridge_t *bs_base; /* PIO pointer to Bridge chip */ char *bs_name; /* hw graph name */ xwidgetnum_t bs_xid; /* Bridge's xtalk ID number */ devfs_handle_t bs_master; /* xtalk master vertex */ xwidgetnum_t bs_mxid; /* master's xtalk ID number */ iopaddr_t bs_dir_xbase; /* xtalk address for 32-bit PCI direct map */ xwidgetnum_t bs_dir_xport; /* xtalk port for 32-bit PCI direct map */ struct map *bs_int_ate_map; /* rmalloc map for internal ATEs */ struct map *bs_ext_ate_map; /* rmalloc map for external ATEs */ short bs_int_ate_size; /* number of internal ates */ short bs_xbridge; /* if 1 then xbridge */ int bs_rev_num; /* revision number of Bridge */ unsigned bs_dma_flags; /* revision-implied DMA flags */ l1sc_t *bs_l1sc; /* io brick l1 system cntr */ moduleid_t bs_moduleid; /* io brick moduleid */ /* * Lock used primarily to get mutual exclusion while managing any * bridge resources.. */ spinlock_t bs_lock; devfs_handle_t bs_noslot_conn; /* NO-SLOT connection point */ pcibr_info_t bs_noslot_info; struct pcibr_soft_slot_s { /* information we keep about each CFG slot */ /* some devices (ioc3 in non-slotted * configurations, sometimes) make use * of more than one REQ/GNT/INT* signal * sets. The slot corresponding to the * IDSEL that the device responds to is * called the host slot; the slot * numbers that the device is stealing * REQ/GNT/INT bits from are known as * the guest slots.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -