diff options
Diffstat (limited to 'usr/src/uts/sun4u/sys/zulumod.h')
-rw-r--r-- | usr/src/uts/sun4u/sys/zulumod.h | 262 |
1 files changed, 0 insertions, 262 deletions
diff --git a/usr/src/uts/sun4u/sys/zulumod.h b/usr/src/uts/sun4u/sys/zulumod.h deleted file mode 100644 index cce574a1dd..0000000000 --- a/usr/src/uts/sun4u/sys/zulumod.h +++ /dev/null @@ -1,262 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef _ZULUMOD_H -#define _ZULUMOD_H - -#pragma ident "%Z%%M% %I% %E% SMI" - -#ifdef __cplusplus -extern "C" { -#endif - -#include <sys/int_const.h> -#include <sys/zuluvm.h> - -#ifndef _ASM - -#include <sys/zulu_hat.h> -#include <sys/sysmacros.h> - -#define ZULUVM_VERSION_STR(a) #a -#define ZULUVM_VERSION(a) ZULUVM_VERSION_STR(a) -#define ZULUVM_MOD_VERSION \ - ZULUVM_VERSION(XHAT_PROVIDER_VERSION) "." \ - ZULUVM_VERSION(ZULUVM_INTERFACE_VERSION) - -#define ZULUDCHKFUNC(_p1, _p2, _p3) \ - ((_p1) != NULL && (_p1)->_p2 != NULL) ? \ - (_p1)->_p2 _p3 : ZULUVM_NO_SUPPORT -#define ZULUDCHKPROC(_p1, _p2, _p3) \ - if ((_p1) != NULL && (_p1)->_p2 != NULL) (_p1)->_p2 _p3 - -#define zulud_set_itlb_pc(_devp, _a, _b) \ - ZULUDCHKPROC((_devp)->dops, set_itlb_pc, (_a, _b)) -#define zulud_set_dtlb_pc(_devp, _a, _b) \ - ZULUDCHKPROC((_devp)->dops, set_dtlb_pc, (_a, _b)) -#define zulud_write_tte(_devp, _a, _b, _c, _d, _e, _f) \ - ZULUDCHKFUNC((_devp)->dops, write_tte, (_a, _b, _c, _d, _e, _f)) -#define zulud_tlb_done(_devp, _a, _b, _c) \ - ZULUDCHKPROC((_devp)->dops, tlb_done, (_a, _b, _c)) -#define zulud_demap_page(_devp, _a, _b, _c) \ - ZULUDCHKPROC((_devp)->dops, demap_page, (_a, _b, _c)) -#define zulud_demap_ctx(_devp, _a, _b) \ - ZULUDCHKPROC((_devp)->dops, demap_ctx, (_a, _b)) - -#endif - -#define ZULUVM_DATA0_IDX 0 -#define ZULUVM_DATA1_IDX 1 -#define ZULUVM_DATA2_IDX 2 -#define ZULUVM_DATA3_IDX 3 -#define ZULUVM_DATA4_IDX 4 -#define ZULUVM_DATA5_IDX 5 -#define ZULUVM_DATA6_IDX 6 -#define ZULUVM_DATA7_IDX 7 - -#define ZULUVM_IDX2FLAG(i) (1 << (7 - i)) -#define ZULUVM_DATA0_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA0_IDX) -#define ZULUVM_DATA1_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA1_IDX) -#define ZULUVM_DATA2_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA2_IDX) -#define ZULUVM_DATA3_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA3_IDX) -#define ZULUVM_DATA4_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA4_IDX) -#define ZULUVM_DATA5_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA5_IDX) -#define ZULUVM_DATA6_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA6_IDX) -#define ZULUVM_DATA7_FLAG ZULUVM_IDX2FLAG(ZULUVM_DATA7_IDX) - -#define ZULUVM_TLB_ADDR_IDX ZULUVM_DATA0_IDX -#define ZULUVM_TLB_TYPE_IDX ZULUVM_DATA1_IDX -#define ZULUVM_TLB_TTE_IDX ZULUVM_DATA2_IDX -#define ZULUVM_TLB_ERRCODE_IDX ZULUVM_DATA3_IDX - -#define ZULUVM_DATA_FLAGS (ZULUVM_DATA1_FLAG | \ - ZULUVM_DATA6_FLAG) - -#define ZULUVM_GET_TLB_TTE(devp) \ - (devp)->zvm.idata[ZULUVM_TLB_TTE_IDX] -#define ZULUVM_GET_TLB_ADDR(devp) \ - (devp)->zvm.idata[ZULUVM_TLB_ADDR_IDX] -#define ZULUVM_GET_TLB_TYPE(devp) (ZULUVM_DMA_MASK & \ - (devp)->zvm.idata[ZULUVM_TLB_TYPE_IDX]) -#define ZULUVM_GET_TLB_ERRCODE(devp) (int)(0xffffffff & \ - (devp)->zvm.idata[ZULUVM_TLB_ERRCODE_IDX]) - -#define ZULUVM_MAX_DEV 2 -#define ZULUVM_PIL PIL_2 -#define ZULUVM_NUM_PGSZS 4 - -#define ZULUVM_STATE_IDLE 0 -#define ZULUVM_STATE_STOPPED 1 -#define ZULUVM_STATE_CANCELED 2 -#define ZULUVM_STATE_TLB_PENDING 3 -#define ZULUVM_STATE_INTR_QUEUED 4 -#define ZULUVM_STATE_INTR_PENDING 5 -#define ZULUVM_STATE_WRITE_TTE 6 - -#ifndef _ASM - -typedef struct { - uint64_t idata[4]; /* mondo pkt copy area */ - void *arg; /* arg for device calls */ - uint64_t mmu_pa; /* phy. addr of MMU regs */ - struct zuluvm_proc *proc1; - struct zuluvm_proc *proc2; - volatile uint32_t state; /* state of tlb miss handling */ - uint64_t intr_num; /* our soft intr number */ - short dmv_intr; /* dmv interrupt handle */ -#ifdef ZULUVM_STATS - int cancel; - int tlb_miss[ZULUVM_NUM_PGSZS]; - int pagefault; - int no_mapping; - int preload; - int migrate; - int pagesize; - int itlb1miss; - int dtlb1miss; - int itlb2miss; - int dtlb2miss; - int demap_page; - int demap_ctx; -#endif - uint64_t pfnbuf[50]; - int pfncnt; -} zuluvm_miss_t; - -#ifdef ZULUVM_STATS -#define ZULUVM_STATS_MISS(devp, sz) (devp)->zvm.tlb_miss[sz]++ -#define ZULUVM_STATS_PAGEFAULT(devp) (devp)->zvm.pagefault++ -#define ZULUVM_STATS_NOMAP(devp) (devp)->zvm.no_mapping++ -#define ZULUVM_STATS_PRELOAD(devp) (devp)->zvm.preload++ -#define ZULUVM_STATS_MIGRATE(devp) (devp)->zvm.migrate++ -#define ZULUVM_STATS_PAGEZISE(devp) (devp)->zvm.pagesize++ -#define ZULUVM_STATS_CANCEL(devp) (devp)->zvm.cancel++ -#define ZULUVM_STATS_DEMAP_PAGE(devp) (devp)->zvm.demap_page++ -#define ZULUVM_STATS_DEMAP_CTX(devp) (devp)->zvm.demap_ctx++ -#else -#define ZULUVM_STATS_MISS(devp, sz) -#define ZULUVM_STATS_PAGEFAULT(devp) -#define ZULUVM_STATS_NOMAP(devp) -#define ZULUVM_STATS_PRELOAD(devp) -#define ZULUVM_STATS_MIGRATE(devp) -#define ZULUVM_STATS_PAGEZISE(devp) -#define ZULUVM_STATS_CANCEL(devp) -#define ZULUVM_STATS_DEMAP_PAGE(devp) -#define ZULUVM_STATS_DEMAP_CTX(devp) -#endif - -#define ZULUVM_MAX_INTR 32 - -typedef struct { - short offset; - short ino; -} zuluvm_intr_t; - -/* - * This structure contains per device data. - * It is protected by dev_lck. - */ -typedef struct { - zuluvm_miss_t zvm; /* tlb miss state */ - volatile uint64_t *imr; /* intr mapping regs */ - struct zuluvm_proc *procs; /* protected by proc_lck */ - dev_info_t *dip; /* device driver instance */ - zulud_ops_t *dops; /* device drv operations */ - kmutex_t load_lck; /* protects in_intr */ - kmutex_t dev_lck; /* protects this struct */ - kmutex_t proc_lck; /* protects active procs */ - kcondvar_t intr_wait; /* sync for as_free */ - int intr_flags; - int in_intr; - kmutex_t park_lck; /* page fault thread */ - kcondvar_t park_cv; - int parking; - int agentid; /* zulu's agent id */ - zuluvm_intr_t interrupts[ZULUVM_MAX_INTR]; -} zuluvm_state_t; - -#define ZULUVM_INTR_OFFSET offsetof(zuluvm_state_t, interrupts) -#define ZULUVM_INTR2INO(addr) (((zuluvm_intr_t *)(addr))->ino) -#define ZULUVM_INTR2ZDEV(addr) \ - (zuluvm_state_t *)((caddr_t)addr - (ZULUVM_INTR2INO(addr) * \ - sizeof (zuluvm_intr_t)) - ZULUVM_INTR_OFFSET) - -typedef struct zuluvm_proc { - struct zulu_hat *zhat; - zuluvm_state_t *zdev; /* back ptr to dev instance */ - unsigned short refcnt; /* keep this until ref == 0 */ - short valid; /* if valid is 0 then don't use */ - struct zuluvm_proc *next; - struct zuluvm_proc *prev; -} zuluvm_proc_t; - -#define ZULUVM_DO_INTR1 INT32_C(1) -#define ZULUVM_WAIT_INTR1 INT32_C(2) -#define ZULUVM_DO_INTR2 INT32_C(4) -#define ZULUVM_WAIT_INTR2 INT32_C(8) - -int zuluvm_change_state(uint32_t *state_pa, int new, int assume); -void zuluvm_demap_page(void *, struct hat *, short, caddr_t, uint_t); -void zuluvm_demap_ctx(void *, short); -void zuluvm_dmv_tlbmiss_tl1(void); -void zuluvm_load_tte(struct zulu_hat *zhat, caddr_t addr, uint64_t pfn, - int perm, int size); - - -#endif - -/* - * The following defines are copied from the ZFB and ZULU - * workspaces. We re-define them here since we can't have - * a dependency onto files outside our consolidation - */ -#define ZULUVM_IMR_V_MASK UINT64_C(0x0000000080000000) -#define ZULUVM_IMR_TARGET_SHIFT INT32_C(26) -#define ZULUVM_IMR_MAX INT32_C(0x3f) - -#define ZULUVM_ZFB_MMU_TLB_D_V_MASK 0x8000000000000000 -#define ZULUVM_ZFB_MMU_TLB_D_PA_SHIFT 0xD /* 13 bits */ -#define ZULUVM_ZFB_MMU_TLB_D_C_MASK 0x20 -#define ZULUVM_ZFB_MMU_TLB_D_SZ_SHIFT 0x3D /* 61 */ -#define ZULUVM_ZFB_MMU_TLB_D_SZ_MASK 0x6000000000000000 -#define ZULUVM_ZFB_MMU_TLB_D_W_MASK 0x2 -#define ZULUVM_ZFB_MMU_TLB_CR_IMISS_MASK 0x2 -#define ZULUVM_ZFB_MMU_TLB_CR_DMISS_MASK 0x1 -#define ZULUVM_ZFB_MMU_DTLB_PAGE_SZ_2_MASK 0xc /* DTLB2 Page size */ -#define ZULUVM_ZFB_MMU_DTLB_PAGE_SZ_2_SHIFT 2 -#define ZULUVM_DTLB_PAGE_SZ 0x8 -#define ZULUVM_ITLB_DATA_IN 0x18 -#define ZULUVM_DTLB_DATA_IN 0x28 -#define ZULUVM_TLB_CONTROL 0 -#define ZULUVM_ITLB_MISS_ICR 0x0 -#define ZULUVM_DTLB_MISS_ICR 0x8 -#define ZULUVM_DMA1_TSB_BASE 0x50 -#define ZULUVM_DMA2_TSB_BASE 0x68 - -#ifdef __cplusplus -} -#endif - -#endif /* _ZULUMOD_H */ |