^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) #ifndef _AHA1542_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) #define _AHA1542_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) /* I/O Port interface 4.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) /* READ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #define STATUS(base) base
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #define STST BIT(7) /* Self Test in Progress */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define DIAGF BIT(6) /* Internal Diagnostic Failure */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #define INIT BIT(5) /* Mailbox Initialization Required */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #define IDLE BIT(4) /* SCSI Host Adapter Idle */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #define CDF BIT(3) /* Command/Data Out Port Full */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #define DF BIT(2) /* Data In Port Full */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) /* BIT(1) is reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #define INVDCMD BIT(0) /* Invalid H A Command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define STATMASK (STST | DIAGF | INIT | IDLE | CDF | DF | INVDCMD)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define INTRFLAGS(base) (STATUS(base)+2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define ANYINTR BIT(7) /* Any Interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define SCRD BIT(3) /* SCSI Reset Detected */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define HACC BIT(2) /* HA Command Complete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define MBOA BIT(1) /* MBO Empty */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define MBIF BIT(0) /* MBI Full */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define INTRMASK (ANYINTR | SCRD | HACC | MBOA | MBIF)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) /* WRITE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define CONTROL(base) STATUS(base)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define HRST BIT(7) /* Hard Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define SRST BIT(6) /* Soft Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define IRST BIT(5) /* Interrupt Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define SCRST BIT(4) /* SCSI Bus Reset */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) /* READ/WRITE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define DATA(base) (STATUS(base)+1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define CMD_NOP 0x00 /* No Operation */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define CMD_MBINIT 0x01 /* Mailbox Initialization */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define CMD_START_SCSI 0x02 /* Start SCSI Command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define CMD_INQUIRY 0x04 /* Adapter Inquiry */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define CMD_EMBOI 0x05 /* Enable MailBox Out Interrupt */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define CMD_BUSON_TIME 0x07 /* Set Bus-On Time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define CMD_BUSOFF_TIME 0x08 /* Set Bus-Off Time */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) #define CMD_DMASPEED 0x09 /* Set AT Bus Transfer Speed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define CMD_RETDEVS 0x0a /* Return Installed Devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define CMD_RETCONF 0x0b /* Return Configuration Data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define CMD_RETSETUP 0x0d /* Return Setup Data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define CMD_ECHO 0x1f /* ECHO Command Data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define CMD_EXTBIOS 0x28 /* Return extend bios information only 1542C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define CMD_MBENABLE 0x29 /* Set Mailbox Interface enable only 1542C */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) /* Mailbox Definition 5.2.1 and 5.2.2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) struct mailbox {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) u8 status; /* Command/Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) u8 ccbptr[3]; /* msb, .., lsb */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) /* This is used with scatter-gather */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) struct chain {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) u8 datalen[3]; /* Size of this part of chain */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) u8 dataptr[3]; /* Location of data */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) /* These belong in scsi.h also */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) static inline void any2scsi(u8 *p, u32 v)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) p[0] = v >> 16;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) p[1] = v >> 8;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) p[2] = v;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define scsi2int(up) ( (((long)*(up)) << 16) + (((long)(up)[1]) << 8) + ((long)(up)[2]) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define xscsi2int(up) ( (((long)(up)[0]) << 24) + (((long)(up)[1]) << 16) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) + (((long)(up)[2]) << 8) + ((long)(up)[3]) )
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define MAX_CDB 12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define MAX_SENSE 14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) struct ccb { /* Command Control Block 5.3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) u8 op; /* Command Control Block Operation Code */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) u8 idlun; /* op=0,2:Target Id, op=1:Initiator Id */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) /* Outbound data transfer, length is checked*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) /* Inbound data transfer, length is checked */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) /* Logical Unit Number */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) u8 cdblen; /* SCSI Command Length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) u8 rsalen; /* Request Sense Allocation Length/Disable */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) u8 datalen[3]; /* Data Length (msb, .., lsb) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) u8 dataptr[3]; /* Data Pointer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) u8 linkptr[3]; /* Link Pointer */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) u8 commlinkid; /* Command Linking Identifier */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) u8 hastat; /* Host Adapter Status (HASTAT) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) u8 tarstat; /* Target Device Status */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) u8 reserved[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) u8 cdb[MAX_CDB+MAX_SENSE]; /* SCSI Command Descriptor Block */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) /* REQUEST SENSE */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define AHA1542_REGION_SIZE 4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define AHA1542_MAILBOXES 8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #endif /* _AHA1542_H_ */