idareg.h revision 57828
148156Sjlemon/*-
257828Sjlemon * Copyright (c) 1999,2000 Jonathan Lemon
348156Sjlemon * All rights reserved.
448156Sjlemon *
548156Sjlemon * Redistribution and use in source and binary forms, with or without
648156Sjlemon * modification, are permitted provided that the following conditions
748156Sjlemon * are met:
848156Sjlemon * 1. Redistributions of source code must retain the above copyright
948156Sjlemon *    notice, this list of conditions and the following disclaimer.
1048156Sjlemon * 2. Redistributions in binary form must reproduce the above copyright
1148156Sjlemon *    notice, this list of conditions and the following disclaimer in the
1248156Sjlemon *    documentation and/or other materials provided with the distribution.
1348156Sjlemon *
1448156Sjlemon * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1548156Sjlemon * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1648156Sjlemon * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1748156Sjlemon * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1848156Sjlemon * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1948156Sjlemon * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2048156Sjlemon * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2148156Sjlemon * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2248156Sjlemon * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2348156Sjlemon * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2448156Sjlemon * SUCH DAMAGE.
2548156Sjlemon *
2650477Speter * $FreeBSD: head/sys/dev/ida/idareg.h 57828 2000-03-08 16:16:31Z jlemon $
2748156Sjlemon */
2848156Sjlemon
2948156Sjlemon/*
3048156Sjlemon * #defines and software structures for the Compaq RAID card
3148156Sjlemon */
3248156Sjlemon
3348156Sjlemon/*
3457828Sjlemon * defines for older EISA controllers (IDA, IDA-2, IAES, SMART)
3548156Sjlemon */
3657828Sjlemon#define R_EISA_INT_MASK			0xC89
3757828Sjlemon#define R_EISA_LOCAL_MASK		0xC8C
3857828Sjlemon#define R_EISA_LOCAL_DOORBELL		0xC8D
3957828Sjlemon#define R_EISA_SYSTEM_MASK		0xC8E
4057828Sjlemon#define R_EISA_SYSTEM_DOORBELL		0xC8F
4157828Sjlemon#define R_EISA_LIST_ADDR		0xC90
4257828Sjlemon#define R_EISA_LIST_LEN			0xC94
4357828Sjlemon#define R_EISA_TAG			0xC97
4457828Sjlemon#define R_EISA_COMPLETE_ADDR		0xC98
4557828Sjlemon#define R_EISA_LIST_STATUS		0xC9E
4657828Sjlemon
4757828Sjlemon#define EISA_CHANNEL_BUSY		0x01
4857828Sjlemon#define EISA_CHANNEL_CLEAR		0x02
4957828Sjlemon
5057828Sjlemon
5157828Sjlemon/*
5257828Sjlemon * board register offsets for SMART-2 controllers
5357828Sjlemon */
5448156Sjlemon#define R_CMD_FIFO	0x04
5548156Sjlemon#define R_DONE_FIFO	0x08
5648156Sjlemon#define R_INT_MASK	0x0C
5748156Sjlemon#define R_STATUS	0x10
5848156Sjlemon#define R_INT_PENDING	0x14
5948156Sjlemon
6048156Sjlemon/*
6157828Sjlemon * interrupt mask values for SMART series
6248156Sjlemon */
6348156Sjlemon#define INT_DISABLE	0x00
6448156Sjlemon#define INT_ENABLE	0x01
6548156Sjlemon
6657828Sjlemon
6748156Sjlemon/*
6857828Sjlemon * board offsets for the 42xx series
6957828Sjlemon */
7057828Sjlemon#define R_42XX_STATUS	0x30
7157828Sjlemon#define R_42XX_INT_MASK	0x34
7257828Sjlemon#define R_42XX_REQUEST	0x40
7357828Sjlemon#define R_42XX_REPLY	0x44
7457828Sjlemon
7557828Sjlemon/*
7657828Sjlemon * interrupt values for 42xx series
7757828Sjlemon */
7857828Sjlemon#define INT_ENABLE_42XX			0x00
7957828Sjlemon#define INT_DISABLE_42XX		0x08
8057828Sjlemon#define STATUS_42XX_INT_PENDING		0x08
8157828Sjlemon
8257828Sjlemon
8357828Sjlemon/*
8448156Sjlemon * return status codes
8548156Sjlemon */
8648156Sjlemon#define SOFT_ERROR	0x02
8748156Sjlemon#define HARD_ERROR	0x04
8848156Sjlemon#define CMD_REJECTED	0x14
8948156Sjlemon
9048156Sjlemon/*
9148156Sjlemon * command types
9248156Sjlemon */
9348156Sjlemon#define	CMD_GET_LOG_DRV_INFO	0x10
9448156Sjlemon#define	CMD_GET_CTRL_INFO	0x11
9548156Sjlemon#define	CMD_SENSE_DRV_STATUS	0x12
9648156Sjlemon#define	CMD_START_RECOVERY	0x13
9748156Sjlemon#define	CMD_GET_PHYS_DRV_INFO	0x15
9848156Sjlemon#define	CMD_BLINK_DRV_LEDS	0x16
9948156Sjlemon#define	CMD_SENSE_DRV_LEDS	0x17
10048156Sjlemon#define	CMD_GET_LOG_DRV_EXT	0x18
10148156Sjlemon#define	CMD_GET_CTRL_INFO	0x11
10248156Sjlemon#define CMD_READ		0x20
10348156Sjlemon#define CMD_WRITE		0x30
10448156Sjlemon#define CMD_WRITE_MEDIA		0x31
10548156Sjlemon#define CMD_GET_CONFIG		0x50
10648156Sjlemon#define CMD_SET_CONFIG		0x51
10748156Sjlemon#define CMD_FLUSH_CACHE		0xc2
10848156Sjlemon
10948156Sjlemon/*
11048156Sjlemon * command structures
11148156Sjlemon */
11248156Sjlemonstruct ida_drive_info {
11348156Sjlemon	u_int16_t	secsize 	__attribute__ ((packed));
11448156Sjlemon	u_int32_t	secperunit 	__attribute__ ((packed));
11548156Sjlemon	u_int16_t	ncylinders 	__attribute__ ((packed));
11648156Sjlemon	u_int8_t	nheads	 	__attribute__ ((packed));
11748156Sjlemon	u_int8_t	signature 	__attribute__ ((packed));
11848156Sjlemon	u_int8_t	psectors 	__attribute__ ((packed));
11948156Sjlemon	u_int16_t	wprecomp 	__attribute__ ((packed));
12048156Sjlemon	u_int8_t	max_acc 	__attribute__ ((packed));
12148156Sjlemon	u_int8_t	control 	__attribute__ ((packed));
12248156Sjlemon	u_int16_t	pcylinders 	__attribute__ ((packed));
12348156Sjlemon	u_int8_t	ptracks 	__attribute__ ((packed));
12448156Sjlemon	u_int16_t	landing_zone 	__attribute__ ((packed));
12548156Sjlemon	u_int8_t	nsectors 	__attribute__ ((packed));
12648156Sjlemon	u_int8_t	checksum 	__attribute__ ((packed));
12748156Sjlemon	u_int8_t	mirror 		__attribute__ ((packed));
12848156Sjlemon};
12948156Sjlemon
13048156Sjlemonstruct ida_controller_info {
13148156Sjlemon	u_int8_t	num_drvs 	__attribute__ ((packed));
13248156Sjlemon	u_int32_t	signature 	__attribute__ ((packed));
13348156Sjlemon	u_int8_t	firm_rev[4] 	__attribute__ ((packed));
13448156Sjlemon};
135