1/*- 2 * Copyright (c) 2002 Adaptec Inc. 3 * All rights reserved. 4 * 5 * Written by: David Jeffery 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 11 unchanged lines hidden (view full) --- 20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 * |
28 * $FreeBSD: head/sys/dev/ips/ipsreg.h 154005 2006-01-03 23:03:15Z scottl $ |
29 */ 30 31#include <sys/param.h> 32 33/* 34 * IPS CONSTANTS 35 */ 36#define IPS_VENDOR_ID 0x1014 --- 20 unchanged lines hidden (view full) --- 57#define IPS_STATIC_BUSY 0x08 58 59/* max number of commands set to something low for now */ 60#define IPS_MAX_CMD_NUM 128 61#define IPS_MAX_NUM_DRIVES 8 62#define IPS_MAX_SG_ELEMENTS 32 63#define IPS_MAX_IOBUF_SIZE (64 * 1024) 64#define IPS_BLKSIZE 512 |
65#define IPS_MAX_LD 8 66#define IPS_MAX_CHANNELS 4 67#define IPS_MAX_TARGETS 15 68#define IPS_MAX_CHUNKS 16 |
69 70/* logical drive states */ 71 72#define IPS_LD_OFFLINE 0x02 73#define IPS_LD_OKAY 0x03 74#define IPS_LD_DEGRADED 0x04 75#define IPS_LD_FREE 0x00 76#define IPS_LD_SYS 0x06 --- 43 unchanged lines hidden (view full) --- 120/* command op codes */ 121#define IPS_READ_CMD 0x02 122#define IPS_WRITE_CMD 0x03 123#define IPS_ADAPTER_INFO_CMD 0x05 124#define IPS_CACHE_FLUSH_CMD 0x0A 125#define IPS_REBUILD_STATUS_CMD 0x0C 126#define IPS_ERROR_TABLE_CMD 0x17 127#define IPS_DRIVE_INFO_CMD 0x19 |
128#define IPS_CMD_READ_CONF 0x38 |
129#define IPS_SUBSYS_PARAM_CMD 0x40 130#define IPS_CONFIG_SYNC_CMD 0x58 131#define IPS_SG_READ_CMD 0x82 132#define IPS_SG_WRITE_CMD 0x83 133#define IPS_RW_NVRAM_CMD 0xBC 134#define IPS_FFDC_CMD 0xD7 135 136/* basic_status information returned by the adapter */ --- 185 unchanged lines hidden (view full) --- 322 u_int16_t flash_prog_count; 323 u_int8_t defunct_disks; 324 u_int8_t rebuildflags; 325 u_int8_t offline_drivecount; 326 u_int8_t critical_drivecount; 327 u_int16_t config_update_count; 328 u_int8_t blockedflags; 329 u_int8_t psdn_error; |
330 u_int16_t addr_dead_disk[IPS_MAX_CHANNELS][IPS_MAX_TARGETS]; |
331}__attribute__((packed)) ips_adapter_info_t; 332 |
333typedef struct { 334 u_int8_t initiator; 335 u_int8_t parameters; 336 u_int8_t miscflag; 337 u_int8_t state; 338 u_int32_t blkcount; 339 u_int8_t deviceid[28]; 340} __attribute__((packed)) ips_devstate_t; 341 342/* 343 * The states that a physical drive can be in. The 'present' value can be 344 * OR'd with the other values. 345 */ 346#define IPS_DEVSTATE_PRESENT 0x81 347#define IPS_DEVSTATE_REBUILD 0x02 348#define IPS_DEVSTATE_SPARE 0x04 349#define IPS_DEVSTATE_MEMBER 0x08 350 351typedef struct { 352 u_int8_t channel; 353 u_int8_t target; 354 u_int16_t reserved; 355 u_int32_t startsectors; 356 u_int32_t numsectors; 357} __attribute__((packed)) ips_chunk_t; 358 359typedef struct { 360 u_int16_t userfield; 361 u_int8_t state; 362 u_int8_t raidcacheparam; 363 u_int8_t numchunkunits; 364 u_int8_t stripesize; 365 u_int8_t params; 366 u_int8_t reserved; 367 u_int32_t ldsize; 368 ips_chunk_t chunk[IPS_MAX_CHUNKS]; 369} __attribute__((packed)) ips_ld_t; 370 371typedef struct { 372 u_int8_t boarddisc[8]; 373 u_int8_t processor[8]; 374 u_int8_t numchantype; 375 u_int8_t numhostinttype; 376 u_int8_t compression; 377 u_int8_t nvramtype; 378 u_int32_t nvramsize; 379} __attribute__((packed)) ips_hardware_t; 380 381typedef struct { 382 u_int8_t ldcount; 383 u_int8_t day; 384 u_int8_t month; 385 u_int8_t year; 386 u_int8_t initiatorid[4]; 387 u_int8_t hostid[12]; 388 u_int8_t timesign[8]; 389 u_int32_t useropt; 390 u_int16_t userfield; 391 u_int8_t rebuildrate; 392 u_int8_t reserve; 393 ips_hardware_t hardwaredisc; 394 ips_ld_t ld[IPS_MAX_LD]; 395 ips_devstate_t dev[IPS_MAX_CHANNELS][IPS_MAX_TARGETS+1]; 396 u_int8_t reserved[512]; 397} __attribute__((packed)) ips_conf_t; 398 |
399typedef union { 400 struct { 401 u_int8_t reserved; 402 u_int8_t command_id; 403 u_int8_t basic_status; 404 u_int8_t extended_status; 405 } fields; 406 volatile u_int32_t value; 407} ips_cmd_status_t; 408 |