Path: blob/master/arch/alpha/include/asm/core_wildfire.h
15126 views
#ifndef __ALPHA_WILDFIRE__H__1#define __ALPHA_WILDFIRE__H__23#include <linux/types.h>4#include <asm/compiler.h>56#define WILDFIRE_MAX_QBB 8 /* more than 8 requires other mods */7#define WILDFIRE_PCA_PER_QBB 48#define WILDFIRE_IRQ_PER_PCA 64910#define WILDFIRE_NR_IRQS \11(WILDFIRE_MAX_QBB * WILDFIRE_PCA_PER_QBB * WILDFIRE_IRQ_PER_PCA)1213extern unsigned char wildfire_hard_qbb_map[WILDFIRE_MAX_QBB];14extern unsigned char wildfire_soft_qbb_map[WILDFIRE_MAX_QBB];15#define QBB_MAP_EMPTY 0xff1617extern unsigned long wildfire_hard_qbb_mask;18extern unsigned long wildfire_soft_qbb_mask;19extern unsigned long wildfire_gp_mask;20extern unsigned long wildfire_hs_mask;21extern unsigned long wildfire_iop_mask;22extern unsigned long wildfire_ior_mask;23extern unsigned long wildfire_pca_mask;24extern unsigned long wildfire_cpu_mask;25extern unsigned long wildfire_mem_mask;2627#define WILDFIRE_QBB_EXISTS(qbbno) (wildfire_soft_qbb_mask & (1 << (qbbno)))2829#define WILDFIRE_MEM_EXISTS(qbbno) (wildfire_mem_mask & (0xf << ((qbbno) << 2)))3031#define WILDFIRE_PCA_EXISTS(qbbno, pcano) \32(wildfire_pca_mask & (1 << (((qbbno) << 2) + (pcano))))3334typedef struct {35volatile unsigned long csr __attribute__((aligned(64)));36} wildfire_64;3738typedef struct {39volatile unsigned long csr __attribute__((aligned(256)));40} wildfire_256;4142typedef struct {43volatile unsigned long csr __attribute__((aligned(2048)));44} wildfire_2k;4546typedef struct {47wildfire_64 qsd_whami;48wildfire_64 qsd_rev;49wildfire_64 qsd_port_present;50wildfire_64 qsd_port_active;51wildfire_64 qsd_fault_ena;52wildfire_64 qsd_cpu_int_ena;53wildfire_64 qsd_mem_config;54wildfire_64 qsd_err_sum;55wildfire_64 ce_sum[4];56wildfire_64 dev_init[4];57wildfire_64 it_int[4];58wildfire_64 ip_int[4];59wildfire_64 uce_sum[4];60wildfire_64 se_sum__non_dev_int[4];61wildfire_64 scratch[4];62wildfire_64 qsd_timer;63wildfire_64 qsd_diag;64} wildfire_qsd;6566typedef struct {67wildfire_256 qsd_whami;68wildfire_256 __pad1;69wildfire_256 ce_sum;70wildfire_256 dev_init;71wildfire_256 it_int;72wildfire_256 ip_int;73wildfire_256 uce_sum;74wildfire_256 se_sum;75} wildfire_fast_qsd;7677typedef struct {78wildfire_2k qsa_qbb_id;79wildfire_2k __pad1;80wildfire_2k qsa_port_ena;81wildfire_2k qsa_scratch;82wildfire_2k qsa_config[5];83wildfire_2k qsa_ref_int;84wildfire_2k qsa_qbb_pop[2];85wildfire_2k qsa_dtag_fc;86wildfire_2k __pad2[3];87wildfire_2k qsa_diag;88wildfire_2k qsa_diag_lock[4];89wildfire_2k __pad3[11];90wildfire_2k qsa_cpu_err_sum;91wildfire_2k qsa_misc_err_sum;92wildfire_2k qsa_tmo_err_sum;93wildfire_2k qsa_err_ena;94wildfire_2k qsa_tmo_config;95wildfire_2k qsa_ill_cmd_err_sum;96wildfire_2k __pad4[26];97wildfire_2k qsa_busy_mask;98wildfire_2k qsa_arr_valid;99wildfire_2k __pad5[2];100wildfire_2k qsa_port_map[4];101wildfire_2k qsa_arr_addr[8];102wildfire_2k qsa_arr_mask[8];103} wildfire_qsa;104105typedef struct {106wildfire_64 ioa_config;107wildfire_64 iod_config;108wildfire_64 iop_switch_credits;109wildfire_64 __pad1;110wildfire_64 iop_hose_credits;111wildfire_64 __pad2[11];112struct {113wildfire_64 __pad3;114wildfire_64 init;115} iop_hose[4];116wildfire_64 ioa_hose_0_ctrl;117wildfire_64 iod_hose_0_ctrl;118wildfire_64 ioa_hose_1_ctrl;119wildfire_64 iod_hose_1_ctrl;120wildfire_64 ioa_hose_2_ctrl;121wildfire_64 iod_hose_2_ctrl;122wildfire_64 ioa_hose_3_ctrl;123wildfire_64 iod_hose_3_ctrl;124struct {125wildfire_64 target;126wildfire_64 __pad4;127} iop_dev_int[4];128129wildfire_64 iop_err_int_target;130wildfire_64 __pad5[7];131wildfire_64 iop_qbb_err_sum;132wildfire_64 __pad6;133wildfire_64 iop_qbb_se_sum;134wildfire_64 __pad7;135wildfire_64 ioa_err_sum;136wildfire_64 iod_err_sum;137wildfire_64 __pad8[4];138wildfire_64 ioa_diag_force_err;139wildfire_64 iod_diag_force_err;140wildfire_64 __pad9[4];141wildfire_64 iop_diag_send_err_int;142wildfire_64 __pad10[15];143wildfire_64 ioa_scratch;144wildfire_64 iod_scratch;145} wildfire_iop;146147typedef struct {148wildfire_2k gpa_qbb_map[4];149wildfire_2k gpa_mem_pop_map;150wildfire_2k gpa_scratch;151wildfire_2k gpa_diag;152wildfire_2k gpa_config_0;153wildfire_2k __pad1;154wildfire_2k gpa_init_id;155wildfire_2k gpa_config_2;156/* not complete */157} wildfire_gp;158159typedef struct {160wildfire_64 pca_what_am_i;161wildfire_64 pca_err_sum;162wildfire_64 pca_diag_force_err;163wildfire_64 pca_diag_send_err_int;164wildfire_64 pca_hose_credits;165wildfire_64 pca_scratch;166wildfire_64 pca_micro_addr;167wildfire_64 pca_micro_data;168wildfire_64 pca_pend_int;169wildfire_64 pca_sent_int;170wildfire_64 __pad1;171wildfire_64 pca_stdio_edge_level;172wildfire_64 __pad2[52];173struct {174wildfire_64 target;175wildfire_64 enable;176} pca_int[4];177wildfire_64 __pad3[56];178wildfire_64 pca_alt_sent_int[32];179} wildfire_pca;180181typedef struct {182wildfire_64 ne_what_am_i;183/* not complete */184} wildfire_ne;185186typedef struct {187wildfire_64 fe_what_am_i;188/* not complete */189} wildfire_fe;190191typedef struct {192wildfire_64 pci_io_addr_ext;193wildfire_64 pci_ctrl;194wildfire_64 pci_err_sum;195wildfire_64 pci_err_addr;196wildfire_64 pci_stall_cnt;197wildfire_64 pci_iack_special;198wildfire_64 __pad1[2];199wildfire_64 pci_pend_int;200wildfire_64 pci_sent_int;201wildfire_64 __pad2[54];202struct {203wildfire_64 wbase;204wildfire_64 wmask;205wildfire_64 tbase;206} pci_window[4];207wildfire_64 pci_flush_tlb;208wildfire_64 pci_perf_mon;209} wildfire_pci;210211#define WILDFIRE_ENTITY_SHIFT 18212213#define WILDFIRE_GP_ENTITY (0x10UL << WILDFIRE_ENTITY_SHIFT)214#define WILDFIRE_IOP_ENTITY (0x08UL << WILDFIRE_ENTITY_SHIFT)215#define WILDFIRE_QSA_ENTITY (0x04UL << WILDFIRE_ENTITY_SHIFT)216#define WILDFIRE_QSD_ENTITY_SLOW (0x05UL << WILDFIRE_ENTITY_SHIFT)217#define WILDFIRE_QSD_ENTITY_FAST (0x01UL << WILDFIRE_ENTITY_SHIFT)218219#define WILDFIRE_PCA_ENTITY(pca) ((0xc|(pca))<<WILDFIRE_ENTITY_SHIFT)220221#define WILDFIRE_BASE (IDENT_ADDR | (1UL << 40))222223#define WILDFIRE_QBB_MASK 0x0fUL /* for now, only 4 bits/16 QBBs */224225#define WILDFIRE_QBB(q) ((~((long)(q)) & WILDFIRE_QBB_MASK) << 36)226#define WILDFIRE_HOSE(h) ((long)(h) << 33)227228#define WILDFIRE_QBB_IO(q) (WILDFIRE_BASE | WILDFIRE_QBB(q))229#define WILDFIRE_QBB_HOSE(q,h) (WILDFIRE_QBB_IO(q) | WILDFIRE_HOSE(h))230231#define WILDFIRE_MEM(q,h) (WILDFIRE_QBB_HOSE(q,h) | 0x000000000UL)232#define WILDFIRE_CONF(q,h) (WILDFIRE_QBB_HOSE(q,h) | 0x1FE000000UL)233#define WILDFIRE_IO(q,h) (WILDFIRE_QBB_HOSE(q,h) | 0x1FF000000UL)234235#define WILDFIRE_qsd(q) \236((wildfire_qsd *)(WILDFIRE_QBB_IO(q)|WILDFIRE_QSD_ENTITY_SLOW|(((1UL<<13)-1)<<23)))237238#define WILDFIRE_fast_qsd() \239((wildfire_fast_qsd *)(WILDFIRE_QBB_IO(0)|WILDFIRE_QSD_ENTITY_FAST|(((1UL<<13)-1)<<23)))240241#define WILDFIRE_qsa(q) \242((wildfire_qsa *)(WILDFIRE_QBB_IO(q)|WILDFIRE_QSA_ENTITY|(((1UL<<13)-1)<<23)))243244#define WILDFIRE_iop(q) \245((wildfire_iop *)(WILDFIRE_QBB_IO(q)|WILDFIRE_IOP_ENTITY|(((1UL<<13)-1)<<23)))246247#define WILDFIRE_gp(q) \248((wildfire_gp *)(WILDFIRE_QBB_IO(q)|WILDFIRE_GP_ENTITY|(((1UL<<13)-1)<<23)))249250#define WILDFIRE_pca(q,pca) \251((wildfire_pca *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(pca)|(((1UL<<13)-1)<<23)))252253#define WILDFIRE_ne(q,pca) \254((wildfire_ne *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(pca)|(((1UL<<13)-1)<<23)|(1UL<<16)))255256#define WILDFIRE_fe(q,pca) \257((wildfire_fe *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(pca)|(((1UL<<13)-1)<<23)|(3UL<<15)))258259#define WILDFIRE_pci(q,h) \260((wildfire_pci *)(WILDFIRE_QBB_IO(q)|WILDFIRE_PCA_ENTITY(((h)&6)>>1)|((((h)&1)|2)<<16)|(((1UL<<13)-1)<<23)))261262#define WILDFIRE_IO_BIAS WILDFIRE_IO(0,0)263#define WILDFIRE_MEM_BIAS WILDFIRE_MEM(0,0) /* ??? */264265/* The IO address space is larger than 0xffff */266#define WILDFIRE_IO_SPACE (8UL*1024*1024)267268#ifdef __KERNEL__269270#ifndef __EXTERN_INLINE271#define __EXTERN_INLINE extern inline272#define __IO_EXTERN_INLINE273#endif274275/*276* Memory functions. all accesses are done through linear space.277*/278279__EXTERN_INLINE void __iomem *wildfire_ioportmap(unsigned long addr)280{281return (void __iomem *)(addr + WILDFIRE_IO_BIAS);282}283284__EXTERN_INLINE void __iomem *wildfire_ioremap(unsigned long addr,285unsigned long size)286{287return (void __iomem *)(addr + WILDFIRE_MEM_BIAS);288}289290__EXTERN_INLINE int wildfire_is_ioaddr(unsigned long addr)291{292return addr >= WILDFIRE_BASE;293}294295__EXTERN_INLINE int wildfire_is_mmio(const volatile void __iomem *xaddr)296{297unsigned long addr = (unsigned long)xaddr;298return (addr & 0x100000000UL) == 0;299}300301#undef __IO_PREFIX302#define __IO_PREFIX wildfire303#define wildfire_trivial_rw_bw 1304#define wildfire_trivial_rw_lq 1305#define wildfire_trivial_io_bw 1306#define wildfire_trivial_io_lq 1307#define wildfire_trivial_iounmap 1308#include <asm/io_trivial.h>309310#ifdef __IO_EXTERN_INLINE311#undef __EXTERN_INLINE312#undef __IO_EXTERN_INLINE313#endif314315#endif /* __KERNEL__ */316317#endif /* __ALPHA_WILDFIRE__H__ */318319320