#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,
};
#define REG_SCSI_DATA 0
#define REG_BSTAT 1
#define BSTAT_BSY BIT(0)
#define BSTAT_MSG BIT(1)
#define BSTAT_IO BIT(2)
#define BSTAT_CMD BIT(3)
#define BSTAT_REQ BIT(4)
#define BSTAT_SEL BIT(5)
#define BSTAT_ACK BIT(6)
#define BSTAT_ATN BIT(7)
#define REG_BCTL 1
#define BCTL_RST BIT(0)
#define BCTL_SEL BIT(1)
#define BCTL_BSY BIT(2)
#define BCTL_ATN BIT(3)
#define BCTL_IO BIT(4)
#define BCTL_CMD BIT(5)
#define BCTL_MSG BIT(6)
#define BCTL_BUSEN BIT(7)
#define REG_ASTAT 2
#define ASTAT_IRQ BIT(0)
#define ASTAT_ARB BIT(1)
#define ASTAT_PARERR BIT(2)
#define ASTAT_RST BIT(3)
#define ASTAT_FIFODIR BIT(4)
#define ASTAT_FIFOEN BIT(5)
#define ASTAT_PAREN BIT(6)
#define ASTAT_BUSEN BIT(7)
#define REG_ICTL 2
#define ICTL_FIFO_MASK 0x0f
#define ICTL_FIFO BIT(4)
#define ICTL_ARB BIT(5)
#define ICTL_SEL BIT(6)
#define ICTL_REQ BIT(7)
#define REG_FSTAT 3
#define FSTAT_ONOTEMPTY BIT(0)
#define FSTAT_INOTEMPTY BIT(1)
#define FSTAT_NOTEMPTY BIT(2)
#define FSTAT_NOTFULL BIT(3)
#define REG_MCTL 3
#define MCTL_ACK_MASK 0x0f
#define MCTL_ACTDEASS BIT(4)
#define MCTL_TARGET BIT(5)
#define MCTL_FASTSYNC BIT(6)
#define MCTL_SYNC BIT(7)
#define REG_INTCOND 4
#define IRQ_FIFO BIT(1)
#define IRQ_REQ BIT(2)
#define IRQ_SEL BIT(3)
#define IRQ_ARB BIT(4)
#define IRQ_RST BIT(5)
#define IRQ_FORCED BIT(6)
#define IRQ_TIMEOUT BIT(7)
#define REG_ACTL 4
#define ACTL_RESET BIT(0)
#define ACTL_FIRQ BIT(1)
#define ACTL_ARB BIT(2)
#define ACTL_PAREN BIT(3)
#define ACTL_IRQEN BIT(4)
#define ACTL_CLRFIRQ BIT(5)
#define ACTL_FIFOWR BIT(6)
#define ACTL_FIFOEN BIT(7)
#define REG_ID_LSB 5
#define REG_ACTL2 5
#define ACTL2_RAMOVRLY BIT(0)
#define ACTL2_SLEEP BIT(7)
#define REG_ID_MSB 6
#define REG_LOOPBACK 7
#define REG_SCSI_DATA_NOACK 8
#define REG_ASTAT3 9
#define ASTAT3_ACTDEASS BIT(0)
#define ASTAT3_RAMOVRLY BIT(1)
#define ASTAT3_TARGERR BIT(2)
#define ASTAT3_IRQEN BIT(3)
#define ASTAT3_IRQMASK 0xf0
#define REG_CFG1 10
#define CFG1_BUS BIT(0)
#define CFG1_IRQ_MASK 0x0e
#define CFG1_IO_MASK 0x30
#define CFG1_BIOS_MASK 0xc0
#define REG_CFG2 11
#define CFG2_ROMDIS BIT(0)
#define CFG2_RAMDIS BIT(1)
#define CFG2_IRQEDGE BIT(2)
#define CFG2_NOWS BIT(3)
#define CFG2_32BIT BIT(7)
#define REG_FIFO 12
#define REG_FIFO_COUNT 14
#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
struct Scsi_Host *fdomain_create(int base, int irq, int this_id,
struct device *dev);
int fdomain_destroy(struct Scsi_Host *sh);