1*86d7f5d3SJohn Marino /*- 2*86d7f5d3SJohn Marino * Copyright (c) 1999,2000 Jonathan Lemon 3*86d7f5d3SJohn Marino * All rights reserved. 4*86d7f5d3SJohn Marino * 5*86d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 6*86d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 7*86d7f5d3SJohn Marino * are met: 8*86d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 9*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 10*86d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 11*86d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in the 12*86d7f5d3SJohn Marino * documentation and/or other materials provided with the distribution. 13*86d7f5d3SJohn Marino * 14*86d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*86d7f5d3SJohn Marino * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*86d7f5d3SJohn Marino * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*86d7f5d3SJohn Marino * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*86d7f5d3SJohn Marino * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*86d7f5d3SJohn Marino * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*86d7f5d3SJohn Marino * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*86d7f5d3SJohn Marino * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*86d7f5d3SJohn Marino * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*86d7f5d3SJohn Marino * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*86d7f5d3SJohn Marino * SUCH DAMAGE. 25*86d7f5d3SJohn Marino * 26*86d7f5d3SJohn Marino * $FreeBSD: src/sys/dev/ida/idareg.h,v 1.3.2.2 2000/07/27 22:27:39 jlemon Exp $ 27*86d7f5d3SJohn Marino * $DragonFly: src/sys/dev/raid/ida/idareg.h,v 1.2 2003/06/17 04:28:27 dillon Exp $ 28*86d7f5d3SJohn Marino */ 29*86d7f5d3SJohn Marino 30*86d7f5d3SJohn Marino /* 31*86d7f5d3SJohn Marino * #defines and software structures for the Compaq RAID card 32*86d7f5d3SJohn Marino */ 33*86d7f5d3SJohn Marino 34*86d7f5d3SJohn Marino /* 35*86d7f5d3SJohn Marino * defines for older EISA controllers (IDA, IDA-2, IAES, SMART) 36*86d7f5d3SJohn Marino */ 37*86d7f5d3SJohn Marino #define R_EISA_INT_MASK 0x01 38*86d7f5d3SJohn Marino #define R_EISA_LOCAL_MASK 0x04 39*86d7f5d3SJohn Marino #define R_EISA_LOCAL_DOORBELL 0x05 40*86d7f5d3SJohn Marino #define R_EISA_SYSTEM_MASK 0x06 41*86d7f5d3SJohn Marino #define R_EISA_SYSTEM_DOORBELL 0x07 42*86d7f5d3SJohn Marino #define R_EISA_LIST_ADDR 0x08 43*86d7f5d3SJohn Marino #define R_EISA_LIST_LEN 0x0c 44*86d7f5d3SJohn Marino #define R_EISA_TAG 0x0f 45*86d7f5d3SJohn Marino #define R_EISA_COMPLETE_ADDR 0x10 46*86d7f5d3SJohn Marino #define R_EISA_LIST_STATUS 0x16 47*86d7f5d3SJohn Marino 48*86d7f5d3SJohn Marino #define EISA_CHANNEL_BUSY 0x01 49*86d7f5d3SJohn Marino #define EISA_CHANNEL_CLEAR 0x02 50*86d7f5d3SJohn Marino 51*86d7f5d3SJohn Marino /* 52*86d7f5d3SJohn Marino * board register offsets for SMART-2 controllers 53*86d7f5d3SJohn Marino */ 54*86d7f5d3SJohn Marino #define R_CMD_FIFO 0x04 55*86d7f5d3SJohn Marino #define R_DONE_FIFO 0x08 56*86d7f5d3SJohn Marino #define R_INT_MASK 0x0C 57*86d7f5d3SJohn Marino #define R_STATUS 0x10 58*86d7f5d3SJohn Marino #define R_INT_PENDING 0x14 59*86d7f5d3SJohn Marino 60*86d7f5d3SJohn Marino /* 61*86d7f5d3SJohn Marino * interrupt mask values for SMART series 62*86d7f5d3SJohn Marino */ 63*86d7f5d3SJohn Marino #define INT_DISABLE 0x00 64*86d7f5d3SJohn Marino #define INT_ENABLE 0x01 65*86d7f5d3SJohn Marino 66*86d7f5d3SJohn Marino /* 67*86d7f5d3SJohn Marino * board offsets for the 42xx series 68*86d7f5d3SJohn Marino */ 69*86d7f5d3SJohn Marino #define R_42XX_STATUS 0x30 70*86d7f5d3SJohn Marino #define R_42XX_INT_MASK 0x34 71*86d7f5d3SJohn Marino #define R_42XX_REQUEST 0x40 72*86d7f5d3SJohn Marino #define R_42XX_REPLY 0x44 73*86d7f5d3SJohn Marino 74*86d7f5d3SJohn Marino /* 75*86d7f5d3SJohn Marino * interrupt values for 42xx series 76*86d7f5d3SJohn Marino */ 77*86d7f5d3SJohn Marino #define INT_ENABLE_42XX 0x00 78*86d7f5d3SJohn Marino #define INT_DISABLE_42XX 0x08 79*86d7f5d3SJohn Marino #define STATUS_42XX_INT_PENDING 0x08 80*86d7f5d3SJohn Marino 81*86d7f5d3SJohn Marino /* 82*86d7f5d3SJohn Marino * return status codes 83*86d7f5d3SJohn Marino */ 84*86d7f5d3SJohn Marino #define SOFT_ERROR 0x02 85*86d7f5d3SJohn Marino #define HARD_ERROR 0x04 86*86d7f5d3SJohn Marino #define CMD_REJECTED 0x14 87*86d7f5d3SJohn Marino 88*86d7f5d3SJohn Marino /* 89*86d7f5d3SJohn Marino * command types 90*86d7f5d3SJohn Marino */ 91*86d7f5d3SJohn Marino #define CMD_GET_LOG_DRV_INFO 0x10 92*86d7f5d3SJohn Marino #define CMD_GET_CTRL_INFO 0x11 93*86d7f5d3SJohn Marino #define CMD_SENSE_DRV_STATUS 0x12 94*86d7f5d3SJohn Marino #define CMD_START_RECOVERY 0x13 95*86d7f5d3SJohn Marino #define CMD_GET_PHYS_DRV_INFO 0x15 96*86d7f5d3SJohn Marino #define CMD_BLINK_DRV_LEDS 0x16 97*86d7f5d3SJohn Marino #define CMD_SENSE_DRV_LEDS 0x17 98*86d7f5d3SJohn Marino #define CMD_GET_LOG_DRV_EXT 0x18 99*86d7f5d3SJohn Marino #define CMD_GET_CTRL_INFO 0x11 100*86d7f5d3SJohn Marino #define CMD_READ 0x20 101*86d7f5d3SJohn Marino #define CMD_WRITE 0x30 102*86d7f5d3SJohn Marino #define CMD_WRITE_MEDIA 0x31 103*86d7f5d3SJohn Marino #define CMD_GET_CONFIG 0x50 104*86d7f5d3SJohn Marino #define CMD_SET_CONFIG 0x51 105*86d7f5d3SJohn Marino #define CMD_START_FIRMWARE 0x99 /* for integrated RAID */ 106*86d7f5d3SJohn Marino #define CMD_FLUSH_CACHE 0xc2 107*86d7f5d3SJohn Marino 108*86d7f5d3SJohn Marino /* 109*86d7f5d3SJohn Marino * command structures 110*86d7f5d3SJohn Marino */ 111*86d7f5d3SJohn Marino struct ida_drive_info { 112*86d7f5d3SJohn Marino u_int16_t secsize; 113*86d7f5d3SJohn Marino u_int32_t secperunit; 114*86d7f5d3SJohn Marino u_int16_t ncylinders; 115*86d7f5d3SJohn Marino u_int8_t nheads; 116*86d7f5d3SJohn Marino u_int8_t signature; 117*86d7f5d3SJohn Marino u_int8_t psectors; 118*86d7f5d3SJohn Marino u_int16_t wprecomp; 119*86d7f5d3SJohn Marino u_int8_t max_acc; 120*86d7f5d3SJohn Marino u_int8_t control; 121*86d7f5d3SJohn Marino u_int16_t pcylinders; 122*86d7f5d3SJohn Marino u_int8_t ptracks; 123*86d7f5d3SJohn Marino u_int16_t landing_zone; 124*86d7f5d3SJohn Marino u_int8_t nsectors; 125*86d7f5d3SJohn Marino u_int8_t checksum; 126*86d7f5d3SJohn Marino u_int8_t mirror; 127*86d7f5d3SJohn Marino } __attribute__ ((packed)); 128*86d7f5d3SJohn Marino 129*86d7f5d3SJohn Marino struct ida_controller_info { 130*86d7f5d3SJohn Marino u_int8_t num_drvs; 131*86d7f5d3SJohn Marino u_int32_t signature; 132*86d7f5d3SJohn Marino u_int8_t firm_rev[4]; 133*86d7f5d3SJohn Marino } __attribute__ ((packed)); 134*86d7f5d3SJohn Marino 135*86d7f5d3SJohn Marino 136*86d7f5d3SJohn Marino struct ida_drive_status { 137*86d7f5d3SJohn Marino u_int8_t status; 138*86d7f5d3SJohn Marino u_int32_t failure_map; 139*86d7f5d3SJohn Marino u_int8_t reserved[416]; 140*86d7f5d3SJohn Marino u_int32_t secrecover; 141*86d7f5d3SJohn Marino u_int8_t rebuilding; 142*86d7f5d3SJohn Marino u_int16_t remap_cnt[8]; 143*86d7f5d3SJohn Marino u_int32_t repl_map; 144*86d7f5d3SJohn Marino u_int32_t spare_map; 145*86d7f5d3SJohn Marino u_int8_t spare_status; 146*86d7f5d3SJohn Marino u_int8_t spare_repl_map[32]; 147*86d7f5d3SJohn Marino u_int32_t repl_ok_map; 148*86d7f5d3SJohn Marino u_int8_t media_exchange; 149*86d7f5d3SJohn Marino u_int8_t cache_failure; 150*86d7f5d3SJohn Marino u_int8_t expand_failure; 151*86d7f5d3SJohn Marino u_int8_t unit_flags; 152*86d7f5d3SJohn Marino u_int16_t big_failure_map[8]; 153*86d7f5d3SJohn Marino u_int16_t big_remap_cnt[128]; 154*86d7f5d3SJohn Marino u_int16_t big_repl_map[8]; 155*86d7f5d3SJohn Marino u_int16_t big_act_spare_map[8]; 156*86d7f5d3SJohn Marino u_int8_t big_spare_repl_map[128]; 157*86d7f5d3SJohn Marino u_int16_t big_repl_ok_map[8]; 158*86d7f5d3SJohn Marino u_int8_t big_rebuilding; 159*86d7f5d3SJohn Marino } __attribute__ ((packed)); 160