⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ascreg.h

📁 早期freebsd实现
💻 H
字号:
/*- * Copyright (c) 1992, 1993 *	The Regents of the University of California.  All rights reserved. * * This code is derived from software contributed to Berkeley by * Ralph Campbell and Rick Macklem. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *	This product includes software developed by the University of *	California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * *	@(#)ascreg.h	8.1 (Berkeley) 6/10/93 *//*  * Mach Operating System * Copyright (c) 1991,1990,1989 Carnegie Mellon University * All Rights Reserved. *  * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. *  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. *  * Carnegie Mellon requests users of this software to return to *  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU *  School of Computer Science *  Carnegie Mellon University *  Pittsburgh PA 15213-3890 *  * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. *//* * HISTORY * $Log:	scsi_53C94.h,v $ * Revision 2.4  91/02/05  17:44:59  mrt * 	Added author notices * 	[91/02/04  11:18:32  mrt] *  * 	Changed to use new Mach copyright * 	[91/02/02  12:17:11  mrt] *  * Revision 2.3  90/12/05  23:34:46  af * 	Documented max DMA xfer size. * 	[90/12/03  23:39:36  af] *  * Revision 2.1.1.1  90/11/01  03:38:54  af * 	Created, from the DEC specs: * 	"PMAZ-AA TURBOchannel SCSI Module Functional Specification" * 	Workstation Systems Engineering, Palo Alto, CA. Aug 27, 1990. * 	And from the NCR data sheets * 	"NCR 53C94, 53C95, 53C96 Advanced SCSI Controller" * 	[90/09/03            af] *//* *	File: scsi_53C94.h * 	Author: Alessandro Forin, Carnegie Mellon University *	Date:	9/90 * *	Defines for the NCR 53C94 ASC (SCSI interface) * 	Some gotcha came from the "86C01/53C94 DMA lab work" written * 	by Ken Stewart (NCR MED Logic Products Applications Engineer) * 	courtesy of NCR.  Thanks Ken ! */#define ASC_OFFSET_53C94	0x0		/* from module base */#define ASC_OFFSET_DMAR		0x40000		/* DMA Address Register */#define ASC_OFFSET_RAM		0x80000		/* SRAM Buffer */#define ASC_OFFSET_ROM		0xc0000		/* Diagnostic ROM */#define	ASC_RAM_SIZE		0x20000		/* 128k (32k*32) */#define PER_TGT_DMA_SIZE	((ASC_RAM_SIZE/7) & ~(sizeof(int)-1))#define ASC_NCMD		7/* * DMA Address Register */#define ASC_DMAR_MASK		0x1ffff		/* 17 bits, 128k */#define ASC_DMAR_WRITE		0x80000000	/* DMA direction bit */#define	ASC_DMA_ADDR(x)		((unsigned)(x) & ASC_DMAR_MASK)/* * Synch xfer parameters, and timing conversions */#define SCSI_MIN_PERIOD		50	/* in 4 nsecs units */#define ASC_MIN_PERIOD25	5	/* in CLKS/BYTE, 1 CLK = 40nsecs */#define ASC_MIN_PERIOD12	3	/* in CLKS/BYTE, 1 CLK = 80nsecs */#define ASC_MAX_PERIOD25	35	/* in CLKS/BYTE, 1 CLK = 40nsecs */#define ASC_MAX_PERIOD12	18	/* in CLKS/BYTE, 1 CLK = 80nsecs */#define ASC_MAX_OFFSET		15	/* pure number *//* * Register map, padded as needed */typedef volatile struct {	u_char	asc_tc_lsb;	/* rw: Transfer Counter LSB */	char	pad0[3];	u_char	asc_tc_msb;	/* rw: Transfer Counter MSB */	char	pad1[3];	u_char	asc_fifo;	/* rw: FIFO top */	char	pad2[3];	u_char	asc_cmd;	/* rw: Command */	char	pad3[3];	u_char	asc_status;	/* r:  Status */#define asc_dbus_id asc_status	/* w: Destination Bus ID */	char	pad4[3];	u_char	asc_intr;	/* r:  Interrupt */#define asc_sel_timo asc_intr	/* w: (re)select timeout */	char	pad5[3];	u_char	asc_ss;		/* r:  Sequence Step */#define asc_syn_p asc_ss	/* w: synchronous period */	char	pad6[3];	u_char	asc_flags;	/* r:  FIFO flags + seq step */#define asc_syn_o asc_flags	/* w: synchronous offset */	char	pad7[3];	u_char	asc_cnfg1;	/* rw: Configuration 1 */	char	pad8[3];	u_char	asc_ccf;	/* w:  Clock Conv. Factor */	char	pad9[3];	u_char	asc_test;	/* w:  Test Mode */	char	pad10[3];	u_char	asc_cnfg2;	/* rw: Configuration 2 */	char	pad11[3];	u_char	asc_cnfg3;	/* rw: Configuration 3 */	char	pad12[3];	u_char	asc_res_fifo;	/* w: Reserve FIFO byte */} asc_regmap_t;/* * Transfer Count: access macros * That a NOP is required after loading the dma counter * I learned on the NCR test code. Sic. */#define	ASC_TC_MAX	0x10000#define ASC_TC_GET(ptr, val)				\	val = (ptr)->asc_tc_lsb | ((ptr)->asc_tc_msb << 8)#define ASC_TC_PUT(ptr, val)				\	(ptr)->asc_tc_lsb = (val);			\	(ptr)->asc_tc_msb = (val) >> 8;			\	(ptr)->asc_cmd = ASC_CMD_NOP | ASC_CMD_DMA;/* * Command register (command codes) */#define ASC_CMD_DMA		0x80					/* Miscellaneous */#define ASC_CMD_NOP		0x00#define ASC_CMD_FLUSH		0x01#define ASC_CMD_RESET		0x02#define ASC_CMD_BUS_RESET	0x03					/* Initiator state */#define ASC_CMD_XFER_INFO	0x10#define ASC_CMD_I_COMPLETE	0x11#define ASC_CMD_MSG_ACPT	0x12#define ASC_CMD_XFER_PAD	0x18#define ASC_CMD_SET_ATN		0x1a#define ASC_CMD_CLR_ATN		0x1b					/* Target state */#define ASC_CMD_SND_MSG		0x20#define ASC_CMD_SND_STATUS	0x21#define ASC_CMD_SND_DATA	0x22#define ASC_CMD_DISC_SEQ	0x23#define ASC_CMD_TERM		0x24#define ASC_CMD_T_COMPLETE	0x25#define ASC_CMD_DISC		0x27#define ASC_CMD_RCV_MSG		0x28#define ASC_CMD_RCV_CDB		0x29#define ASC_CMD_RCV_DATA	0x2a#define ASC_CMD_RCV_CMD		0x2b#define ASC_CMD_ABRT_DMA	0x04					/* Disconnected state */#define ASC_CMD_RESELECT	0x40#define ASC_CMD_SEL		0x41#define ASC_CMD_SEL_ATN		0x42#define ASC_CMD_SEL_ATN_STOP	0x43#define ASC_CMD_ENABLE_SEL	0x44#define ASC_CMD_DISABLE_SEL	0x45#define ASC_CMD_SEL_ATN3	0x46/* * Status register, and phase encoding */#define ASC_CSR_INT		0x80#define ASC_CSR_GE		0x40#define ASC_CSR_PE		0x20#define ASC_CSR_TC		0x10#define ASC_CSR_VGC		0x08#define ASC_CSR_MSG		0x04#define ASC_CSR_CD		0x02#define ASC_CSR_IO		0x01#define	ASC_PHASE(csr)		((csr) & 0x7)#define ASC_PHASE_DATAO		0x0#define ASC_PHASE_DATAI		0x1#define ASC_PHASE_COMMAND	0x2#define ASC_PHASE_STATUS	0x3				/* 4..5 ANSI reserved */#define ASC_PHASE_MSG_OUT	0x6#define ASC_PHASE_MSG_IN	0x7/* * Destination Bus ID */#define ASC_DEST_ID_MASK	0x07/* * Interrupt register */#define ASC_INT_RESET		0x80#define ASC_INT_ILL		0x40#define ASC_INT_DISC		0x20#define ASC_INT_BS		0x10#define ASC_INT_FC		0x08#define ASC_INT_RESEL		0x04#define ASC_INT_SEL_ATN		0x02#define ASC_INT_SEL		0x01/* * Timeout register: * *	val = (timeout * CLK_freq) / (8192 * CCF); */#define	ASC_TIMEOUT_250(clk, ccf)	(((clk) * 31) / (ccf))/* * Sequence Step register */#define ASC_SS_RESERVED		0xf0#define ASC_SS_SOM		0x08#define ASC_SS_MASK		0x07#define	ASC_SS(ss)		((ss) & ASC_SS_MASK)/* * Synchronous Transfer Period */#define ASC_STP_MASK		0x1f#define ASC_STP_MIN		0x05		/* 5 clk per byte */#define ASC_STP_MAX		0x04		/* after ovfl, 35 clk/byte *//* * FIFO flags */#define ASC_FLAGS_SEQ_STEP	0xe0#define ASC_FLAGS_FIFO_CNT	0x1f/* * Synchronous offset */#define ASC_SYNO_MASK		0x0f		/* 0 -> asyn *//* * Configuration 1 */#define ASC_CNFG1_SLOW		0x80#define ASC_CNFG1_SRD		0x40#define ASC_CNFG1_P_TEST	0x20#define ASC_CNFG1_P_CHECK	0x10#define ASC_CNFG1_TEST		0x08#define ASC_CNFG1_MY_BUS_ID	0x07/* * CCF register */#define	ASC_CCF(clk)		((((clk) - 1) / 5) + 1)/* * Test register */#define ASC_TEST_XXXX		0xf8#define ASC_TEST_HI_Z		0x04#define ASC_TEST_I		0x02#define ASC_TEST_T		0x01/* * Configuration 2 */#define ASC_CNFG2_RFB		0x80#define ASC_CNFG2_EPL		0x40#define ASC_CNFG2_EBC		0x20#define ASC_CNFG2_DREQ_HIZ	0x10#define ASC_CNFG2_SCSI2		0x08#define ASC_CNFG2_BPA		0x04#define ASC_CNFG2_RPE		0x02#define ASC_CNFG2_DPE		0x01/* * Configuration 3 */#define ASC_CNFG3_RESERVED	0xf8#define ASC_CNFG3_SRB		0x04#define ASC_CNFG3_ALT_DMA	0x02#define ASC_CNFG3_T8		0x01

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -