📄 pcibr_private.h
字号:
*/ int has_host; pciio_slot_t host_slot; devfs_handle_t slot_conn; int slot_status; /* Potentially several connection points * for this slot. bss_ninfo is how many, * and bss_infos is a pointer to * an array pcibr_info_t values (which are * pointers to pcibr_info structs, stored * as device_info in connection ponts). */ int bss_ninfo; pcibr_info_h bss_infos; /* Temporary Compatibility Macros, for * stuff that has moved out of bs_slot * and into the info structure. These * will go away when their users have * converted over to multifunction- * friendly use of bss_{ninfo,infos}. */#define bss_vendor_id bss_infos[0]->f_vendor#define bss_device_id bss_infos[0]->f_device#define bss_window bss_infos[0]->f_window#define bssw_space w_space#define bssw_base w_base#define bssw_size w_size /* Where is DevIO(x) pointing? */ /* bssd_space is NONE if it is not assigned. */ struct { pciio_space_t bssd_space; iopaddr_t bssd_base; } bss_devio; /* Shadow value for Device(x) register, * so we don't have to go to the chip. */ bridgereg_t bss_device; /* Number of sets on GBR/REALTIME bit outstanding * Used by Priority I/O for tracking reservations */ int bss_pri_uctr; /* Number of "uses" of PMU, 32-bit direct, * and 64-bit direct DMA (0:none, <0: trans, * >0: how many dmamaps). Device(x) bits * controlling attribute of each kind of * channel can't be changed by dmamap_alloc * or dmatrans if the controlling counter * is nonzero. dmatrans is forever. */ int bss_pmu_uctr; int bss_d32_uctr; int bss_d64_uctr; /* When the contents of mapping configuration * information is locked down by dmatrans, * repeated checks of the same flags should * be shortcircuited for efficiency. */ iopaddr_t bss_d64_base; unsigned bss_d64_flags; iopaddr_t bss_d32_base; unsigned bss_d32_flags; /* Shadow information used for implementing * Bridge Hardware WAR #484930 */ atomic_t bss_ext_ates_active; volatile unsigned *bss_cmd_pointer; unsigned bss_cmd_shadow; } bs_slot[8]; pcibr_intr_bits_f *bs_intr_bits; /* RRB MANAGEMENT * bs_rrb_fixed: bitmap of slots whose RRB * allocations we should not "automatically" change * bs_rrb_avail: number of RRBs that have not * been allocated or reserved for {even,odd} slots * bs_rrb_res: number of RRBs reserved for the * use of the index slot number * bs_rrb_valid: number of RRBs marked valid * for the indexed slot number; indexes 8-15 * are for the virtual channels for slots 0-7. */ int bs_rrb_fixed; int bs_rrb_avail[2]; int bs_rrb_res[8]; int bs_rrb_valid[16]; struct { /* Each Bridge interrupt bit has a single XIO * interrupt channel allocated. */ xtalk_intr_t bsi_xtalk_intr; /* * A wrapper structure is associated with each * Bridge interrupt bit. */ struct pcibr_intr_wrap_s bsi_pcibr_intr_wrap; } bs_intr[8]; xtalk_intr_t bsi_err_intr; /* * We stash away some information in this structure on getting * an error interrupt. This information is used during PIO read/ * write error handling. * * As it stands now, we do not re-enable the error interrupt * till the error is resolved. Error resolution happens either at * bus error time for PIO Read errors (~100 microseconds), or at * the scheduled timeout time for PIO write errors (~milliseconds). * If this delay causes problems, we may need to move towards * a different scheme.. * * Note that there is no locking while looking at this data structure. * There should not be any race between bus error code and * error interrupt code.. will look into this if needed. */ struct br_errintr_info { int bserr_toutcnt;#ifdef LATER toid_t bserr_toutid; /* Timeout started by errintr */#endif iopaddr_t bserr_addr; /* Address where error occurred */ bridgereg_t bserr_intstat; /* interrupts active at error time */ } bs_errinfo; /* * PCI Bus Space allocation data structure. * This info is used to satisfy the callers of pcibr_piospace_alloc * interface. Most of these users need "large" amounts of PIO * space (typically in Megabytes), and they generally tend to * take once and never release.. * For Now use a simple algorithm to manage it. On allocation, * Update the _base field to reflect next free address. * * Freeing does nothing.. So, once allocated, it's gone for good. */ struct br_pcisp_info { iopaddr_t pci_io_base; iopaddr_t pci_io_last; iopaddr_t pci_swin_base; iopaddr_t pci_swin_last; iopaddr_t pci_mem_base; iopaddr_t pci_mem_last; } bs_spinfo; struct bs_errintr_stat_s { uint32_t bs_errcount_total; uint32_t bs_lasterr_timestamp; uint32_t bs_lasterr_snapshot; } bs_errintr_stat[PCIBR_ISR_MAX_ERRS]; /* * Bridge-wide endianness control for * large-window PIO mappings * * These fields are set to PCIIO_BYTE_SWAP * or PCIIO_WORD_VALUES once the swapper * has been configured, one way or the other, * for the direct windows. If they are zero, * nobody has a PIO mapping through that window, * and the swapper can be set either way. */ unsigned bs_pio_end_io; unsigned bs_pio_end_mem;};#define PCIBR_ERRTIME_THRESHOLD (100)#define PCIBR_ERRRATE_THRESHOLD (100)/* * pcibr will respond to hints dropped in its vertex * using the following structure. */struct pcibr_hints_s { /* ph_host_slot is actually +1 so "0" means "no host" */ pciio_slot_t ph_host_slot[8]; /* REQ/GNT/INT in use by ... */ unsigned ph_rrb_fixed; /* do not change RRB allocations */ unsigned ph_hands_off; /* prevent further pcibr operations */ rrb_alloc_funct_t rrb_alloc_funct; /* do dynamic rrb allocation */ pcibr_intr_bits_f *ph_intr_bits; /* map PCI INT[ABCD] to Bridge Int(n) */};extern int pcibr_prefetch_enable_rev, pcibr_wg_enable_rev;/* * Number of bridge non-fatal error interrupts we can see before * we decide to disable that interrupt. */#define PCIBR_ERRINTR_DISABLE_LEVEL 10000/* ===================================================================== * Bridge (pcibr) state management functions * * pcibr_soft_get is here because we do it in a lot * of places and I want to make sure they all stay * in step with each other. * * pcibr_soft_set is here because I want it to be * closely associated with pcibr_soft_get, even * though it is only called in one place. */#define pcibr_soft_get(v) ((pcibr_soft_t)hwgraph_fastinfo_get((v)))#define pcibr_soft_set(v,i) (hwgraph_fastinfo_set((v), (arbitrary_info_t)(i)))#endif /* _ASM_SN_PCI_PCIBR_PRIVATE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -