11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ultrastor.c (C) 1991 David B. Gentzel 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Low-level scsi driver for UltraStor 14F 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * by David B. Gentzel, Whitfield Software Services, Carnegie, PA 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (gentzel@nova.enet.dec.com) 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * scatter/gather added by Scott Taylor (n217cg@tamuts.tamu.edu) 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 24F support by John F. Carr (jfc@athena.mit.edu) 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * John's work modified by Caleb Epstein (cae@jpmorgan.com) and 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Eric Youngdale (eric@tantalus.nrl.navy.mil). 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Thanks to UltraStor for providing the necessary documentation 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _ULTRASTOR_H 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ULTRASTOR_H 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 16d0be4a7d29ad0bd3ce2209dd9e46d410b632db59Christoph Hellwigstatic int ultrastor_detect(struct scsi_host_template *); 17b4620233d6a3510564c561a5a2a365a1d8a34b68Henrik Kretzschmarstatic const char *ultrastor_info(struct Scsi_Host *shpnt); 18f281233d3eba15fb225d21ae2e228fd4553d824aJeff Garzikstatic int ultrastor_queuecommand(struct Scsi_Host *, struct scsi_cmnd *); 19b4620233d6a3510564c561a5a2a365a1d8a34b68Henrik Kretzschmarstatic int ultrastor_abort(struct scsi_cmnd *); 20b4620233d6a3510564c561a5a2a365a1d8a34b68Henrik Kretzschmarstatic int ultrastor_host_reset(struct scsi_cmnd *); 21b4620233d6a3510564c561a5a2a365a1d8a34b68Henrik Kretzschmarstatic int ultrastor_biosparam(struct scsi_device *, struct block_device *, 22b4620233d6a3510564c561a5a2a365a1d8a34b68Henrik Kretzschmar sector_t, int *); 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ULTRASTOR_14F_MAX_SG 16 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ULTRASTOR_24F_MAX_SG 33 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ULTRASTOR_MAX_CMDS_PER_LUN 5 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ULTRASTOR_MAX_CMDS 16 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ULTRASTOR_24F_PORT 0xC80 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef ULTRASTOR_PRIVATE 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_ABORT 0x0001 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_COMMAND 0x0002 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_DETECT 0x0004 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_INTERRUPT 0x0008 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_RESET 0x0010 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_MULTI_CMD 0x0020 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_CSIR 0x0040 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UD_ERROR 0x0080 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* #define PORT_OVERRIDE 0x330 */ 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Values for the PRODUCT_ID ports for the 14F */ 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define US14F_PRODUCT_ID_0 0x56 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define US14F_PRODUCT_ID_1 0x40 /* NOTE: Only upper nibble is used */ 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define US24F_PRODUCT_ID_0 0x56 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define US24F_PRODUCT_ID_1 0x63 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define US24F_PRODUCT_ID_2 0x02 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Subversion values */ 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define U14F 0 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define U34F 1 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* MSCP field values */ 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Opcode */ 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OP_HOST_ADAPTER 0x1 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OP_SCSI 0x2 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OP_RESET 0x4 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Date Transfer Direction */ 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DTD_SCSI 0x0 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DTD_IN 0x1 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DTD_OUT 0x2 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DTD_NONE 0x3 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Host Adapter command subcodes */ 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CMD_INQUIRY 0x1 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CMD_SELF_DIAG 0x2 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CMD_READ_BUFF 0x3 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CMD_WRITE_BUFF 0x4 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 81