hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* SPDX-License-Identifier: GPL-2.0 */
 
#define FDOMAIN_REGION_SIZE    0x10
#define FDOMAIN_BIOS_SIZE    0x2000
 
enum {
   in_arbitration    = 0x02,
   in_selection    = 0x04,
   in_other    = 0x08,
   disconnect    = 0x10,
   aborted        = 0x20,
   sent_ident    = 0x40,
};
 
/* (@) = not present on TMC1800, (#) = not present on TMC1800 and TMC18C50 */
#define REG_SCSI_DATA        0    /* R/W: SCSI Data (with ACK) */
#define REG_BSTAT        1    /* R: SCSI Bus Status */
#define        BSTAT_BSY    BIT(0)     /* Busy */
#define        BSTAT_MSG    BIT(1)     /* Message */
#define        BSTAT_IO    BIT(2)     /* Input/Output */
#define        BSTAT_CMD    BIT(3)     /* Command/Data */
#define        BSTAT_REQ    BIT(4)     /* Request and Not Ack */
#define        BSTAT_SEL    BIT(5)     /* Select */
#define        BSTAT_ACK    BIT(6)     /* Acknowledge and Request */
#define        BSTAT_ATN    BIT(7)     /* Attention */
#define REG_BCTL        1    /* W: SCSI Bus Control */
#define        BCTL_RST    BIT(0)     /* Bus Reset */
#define        BCTL_SEL    BIT(1)     /* Select */
#define        BCTL_BSY    BIT(2)     /* Busy */
#define        BCTL_ATN    BIT(3)     /* Attention */
#define        BCTL_IO        BIT(4)     /* Input/Output */
#define        BCTL_CMD    BIT(5)     /* Command/Data */
#define        BCTL_MSG    BIT(6)     /* Message */
#define        BCTL_BUSEN    BIT(7)     /* Enable bus drivers */
#define REG_ASTAT        2    /* R: Adapter Status 1 */
#define        ASTAT_IRQ    BIT(0)     /* Interrupt active */
#define        ASTAT_ARB    BIT(1)     /* Arbitration complete */
#define        ASTAT_PARERR    BIT(2)     /* Parity error */
#define        ASTAT_RST    BIT(3)     /* SCSI reset occurred */
#define        ASTAT_FIFODIR    BIT(4)     /* FIFO direction */
#define        ASTAT_FIFOEN    BIT(5)     /* FIFO enabled */
#define        ASTAT_PAREN    BIT(6)     /* Parity enabled */
#define        ASTAT_BUSEN    BIT(7)     /* Bus drivers enabled */
#define REG_ICTL        2    /* W: Interrupt Control */
#define        ICTL_FIFO_MASK    0x0f     /* FIFO threshold, 1/16 FIFO size */
#define        ICTL_FIFO    BIT(4)     /* Int. on FIFO count */
#define        ICTL_ARB    BIT(5)     /* Int. on Arbitration complete */
#define        ICTL_SEL    BIT(6)     /* Int. on SCSI Select */
#define        ICTL_REQ    BIT(7)     /* Int. on SCSI Request */
#define REG_FSTAT        3    /* R: Adapter Status 2 (FIFO) - (@) */
#define        FSTAT_ONOTEMPTY    BIT(0)     /* Output FIFO not empty */
#define        FSTAT_INOTEMPTY    BIT(1)     /* Input FIFO not empty */
#define        FSTAT_NOTEMPTY    BIT(2)     /* Main FIFO not empty */
#define        FSTAT_NOTFULL    BIT(3)     /* Main FIFO not full */
#define REG_MCTL        3    /* W: SCSI Data Mode Control */
#define        MCTL_ACK_MASK    0x0f     /* Acknowledge period */
#define        MCTL_ACTDEASS    BIT(4)     /* Active deassert of REQ and ACK */
#define        MCTL_TARGET    BIT(5)     /* Enable target mode */
#define        MCTL_FASTSYNC    BIT(6)     /* Enable Fast Synchronous */
#define        MCTL_SYNC    BIT(7)     /* Enable Synchronous */
#define REG_INTCOND        4    /* R: Interrupt Condition - (@) */
#define        IRQ_FIFO    BIT(1)     /* FIFO interrupt */
#define        IRQ_REQ        BIT(2)     /* SCSI Request interrupt */
#define        IRQ_SEL        BIT(3)     /* SCSI Select interrupt */
#define        IRQ_ARB        BIT(4)     /* SCSI Arbitration interrupt */
#define        IRQ_RST        BIT(5)     /* SCSI Reset interrupt */
#define        IRQ_FORCED    BIT(6)     /* Forced interrupt */
#define        IRQ_TIMEOUT    BIT(7)     /* Bus timeout */
#define REG_ACTL        4    /* W: Adapter Control 1 */
#define        ACTL_RESET    BIT(0)     /* Reset FIFO, parity, reset int. */
#define        ACTL_FIRQ    BIT(1)     /* Set Forced interrupt */
#define        ACTL_ARB    BIT(2)     /* Initiate Bus Arbitration */
#define        ACTL_PAREN    BIT(3)     /* Enable SCSI Parity */
#define        ACTL_IRQEN    BIT(4)     /* Enable interrupts */
#define        ACTL_CLRFIRQ    BIT(5)     /* Clear Forced interrupt */
#define        ACTL_FIFOWR    BIT(6)     /* FIFO Direction (1=write) */
#define        ACTL_FIFOEN    BIT(7)     /* Enable FIFO */
#define REG_ID_LSB        5    /* R: ID Code (LSB) */
#define REG_ACTL2        5    /* Adapter Control 2 - (@) */
#define        ACTL2_RAMOVRLY    BIT(0)     /* Enable RAM overlay */
#define        ACTL2_SLEEP    BIT(7)     /* Sleep mode */
#define REG_ID_MSB        6    /* R: ID Code (MSB) */
#define REG_LOOPBACK        7    /* R/W: Loopback */
#define REG_SCSI_DATA_NOACK    8    /* R/W: SCSI Data (no ACK) */
#define REG_ASTAT3        9    /* R: Adapter Status 3 */
#define        ASTAT3_ACTDEASS    BIT(0)     /* Active deassert enabled */
#define        ASTAT3_RAMOVRLY    BIT(1)     /* RAM overlay enabled */
#define        ASTAT3_TARGERR    BIT(2)     /* Target error */
#define        ASTAT3_IRQEN    BIT(3)     /* Interrupts enabled */
#define        ASTAT3_IRQMASK    0xf0     /* Enabled interrupts mask */
#define REG_CFG1        10    /* R: Configuration Register 1 */
#define        CFG1_BUS    BIT(0)     /* 0 = ISA */
#define        CFG1_IRQ_MASK    0x0e     /* IRQ jumpers */
#define        CFG1_IO_MASK    0x30     /* I/O base jumpers */
#define        CFG1_BIOS_MASK    0xc0     /* BIOS base jumpers */
#define REG_CFG2        11    /* R/W: Configuration Register 2 (@) */
#define        CFG2_ROMDIS    BIT(0)     /* ROM disabled */
#define        CFG2_RAMDIS    BIT(1)     /* RAM disabled */
#define        CFG2_IRQEDGE    BIT(2)     /* Edge-triggered interrupts */
#define        CFG2_NOWS    BIT(3)     /* No wait states */
#define        CFG2_32BIT    BIT(7)     /* 32-bit mode */
#define REG_FIFO        12    /* R/W: FIFO */
#define REG_FIFO_COUNT        14    /* R: FIFO Data Count */
 
#ifdef CONFIG_PM_SLEEP
static const struct dev_pm_ops __maybe_unused fdomain_pm_ops;
#define FDOMAIN_PM_OPS    (&fdomain_pm_ops)
#else
#define FDOMAIN_PM_OPS    NULL
#endif /* CONFIG_PM_SLEEP */
 
struct Scsi_Host *fdomain_create(int base, int irq, int this_id,
                struct device *dev);
int fdomain_destroy(struct Scsi_Host *sh);