Commit ac15c3bc authored by Finn Thain's avatar Finn Thain Committed by Martin K. Petersen

atari_NCR5380: Merge changes from NCR5380.c

In the past, atari_NCR5380.c was overlooked by those working on NCR5380.c
and this caused needless divergence. All of the changes in this patch were
taken from NCR5380.c.

This removes some unimportant discrepancies between the two core driver
forks so that 'diff' can be used to reveal the important ones, to
facilitate reunification.
Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
Reviewed-by: default avatarHannes Reinecke <hare@suse.com>
Tested-by: default avatarMichael Schmitz <schmitzmic@gmail.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 0d2cf867
...@@ -443,22 +443,39 @@ static struct { ...@@ -443,22 +443,39 @@ static struct {
unsigned char mask; unsigned char mask;
const char *name; const char *name;
} signals[] = { } signals[] = {
{ SR_DBP, "PARITY"}, { SR_RST, "RST" }, { SR_BSY, "BSY" }, {SR_DBP, "PARITY"},
{ SR_REQ, "REQ" }, { SR_MSG, "MSG" }, { SR_CD, "CD" }, { SR_IO, "IO" }, {SR_RST, "RST"},
{ SR_SEL, "SEL" }, {0, NULL} {SR_BSY, "BSY"},
}, basrs[] = { {SR_REQ, "REQ"},
{BASR_ATN, "ATN"}, {BASR_ACK, "ACK"}, {0, NULL} {SR_MSG, "MSG"},
}, icrs[] = { {SR_CD, "CD"},
{ICR_ASSERT_RST, "ASSERT RST"},{ICR_ASSERT_ACK, "ASSERT ACK"}, {SR_IO, "IO"},
{ICR_ASSERT_BSY, "ASSERT BSY"}, {ICR_ASSERT_SEL, "ASSERT SEL"}, {SR_SEL, "SEL"},
{ICR_ASSERT_ATN, "ASSERT ATN"}, {ICR_ASSERT_DATA, "ASSERT DATA"},
{0, NULL} {0, NULL}
}, mrs[] = { },
{MR_BLOCK_DMA_MODE, "MODE BLOCK DMA"}, {MR_TARGET, "MODE TARGET"}, basrs[] = {
{MR_ENABLE_PAR_CHECK, "MODE PARITY CHECK"}, {MR_ENABLE_PAR_INTR, {BASR_ATN, "ATN"},
"MODE PARITY INTR"}, {MR_ENABLE_EOP_INTR,"MODE EOP INTR"}, {BASR_ACK, "ACK"},
{0, NULL}
},
icrs[] = {
{ICR_ASSERT_RST, "ASSERT RST"},
{ICR_ASSERT_ACK, "ASSERT ACK"},
{ICR_ASSERT_BSY, "ASSERT BSY"},
{ICR_ASSERT_SEL, "ASSERT SEL"},
{ICR_ASSERT_ATN, "ASSERT ATN"},
{ICR_ASSERT_DATA, "ASSERT DATA"},
{0, NULL}
},
mrs[] = {
{MR_BLOCK_DMA_MODE, "MODE BLOCK DMA"},
{MR_TARGET, "MODE TARGET"},
{MR_ENABLE_PAR_CHECK, "MODE PARITY CHECK"},
{MR_ENABLE_PAR_INTR, "MODE PARITY INTR"},
{MR_ENABLE_EOP_INTR, "MODE EOP INTR"},
{MR_MONITOR_BSY, "MODE MONITOR BSY"}, {MR_MONITOR_BSY, "MODE MONITOR BSY"},
{MR_DMA_MODE, "MODE DMA"}, {MR_ARBITRATE, "MODE ARBITRATION"}, {MR_DMA_MODE, "MODE DMA"},
{MR_ARBITRATE, "MODE ARBITRATION"},
{0, NULL} {0, NULL}
}; };
...@@ -502,8 +519,12 @@ static struct { ...@@ -502,8 +519,12 @@ static struct {
unsigned char value; unsigned char value;
const char *name; const char *name;
} phases[] = { } phases[] = {
{PHASE_DATAOUT, "DATAOUT"}, {PHASE_DATAIN, "DATAIN"}, {PHASE_CMDOUT, "CMDOUT"}, {PHASE_DATAOUT, "DATAOUT"},
{PHASE_STATIN, "STATIN"}, {PHASE_MSGOUT, "MSGOUT"}, {PHASE_MSGIN, "MSGIN"}, {PHASE_DATAIN, "DATAIN"},
{PHASE_CMDOUT, "CMDOUT"},
{PHASE_STATIN, "STATIN"},
{PHASE_MSGOUT, "MSGOUT"},
{PHASE_MSGIN, "MSGIN"},
{PHASE_UNKNOWN, "UNKNOWN"} {PHASE_UNKNOWN, "UNKNOWN"}
}; };
...@@ -529,7 +550,6 @@ static void NCR5380_print_phase(struct Scsi_Host *instance) ...@@ -529,7 +550,6 @@ static void NCR5380_print_phase(struct Scsi_Host *instance)
shost_printk(KERN_DEBUG, instance, "phase %s\n", phases[i].name); shost_printk(KERN_DEBUG, instance, "phase %s\n", phases[i].name);
} }
} }
#endif #endif
/** /**
...@@ -1488,9 +1508,9 @@ static int NCR5380_transfer_pio(struct Scsi_Host *instance, ...@@ -1488,9 +1508,9 @@ static int NCR5380_transfer_pio(struct Scsi_Host *instance,
unsigned char *phase, int *count, unsigned char *phase, int *count,
unsigned char **data) unsigned char **data)
{ {
register unsigned char p = *phase, tmp; unsigned char p = *phase, tmp;
register int c = *count; int c = *count;
register unsigned char *d = *data; unsigned char *d = *data;
/* /*
* The NCR5380 chip will only drive the SCSI bus when the * The NCR5380 chip will only drive the SCSI bus when the
...@@ -1557,17 +1577,17 @@ static int NCR5380_transfer_pio(struct Scsi_Host *instance, ...@@ -1557,17 +1577,17 @@ static int NCR5380_transfer_pio(struct Scsi_Host *instance,
dsprintk(NDEBUG_HANDSHAKE, instance, "REQ negated, handshake complete\n"); dsprintk(NDEBUG_HANDSHAKE, instance, "REQ negated, handshake complete\n");
/* /*
* We have several special cases to consider during REQ/ACK handshaking : * We have several special cases to consider during REQ/ACK handshaking :
* 1. We were in MSGOUT phase, and we are on the last byte of the * 1. We were in MSGOUT phase, and we are on the last byte of the
* message. ATN must be dropped as ACK is dropped. * message. ATN must be dropped as ACK is dropped.
* *
* 2. We are in a MSGIN phase, and we are on the last byte of the * 2. We are in a MSGIN phase, and we are on the last byte of the
* message. We must exit with ACK asserted, so that the calling * message. We must exit with ACK asserted, so that the calling
* code may raise ATN before dropping ACK to reject the message. * code may raise ATN before dropping ACK to reject the message.
* *
* 3. ACK and ATN are clear and the target may proceed as normal. * 3. ACK and ATN are clear and the target may proceed as normal.
*/ */
if (!(p == PHASE_MSGIN && c == 1)) { if (!(p == PHASE_MSGIN && c == 1)) {
if (p == PHASE_MSGOUT && c > 1) if (p == PHASE_MSGOUT && c > 1)
NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN); NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_ATN);
...@@ -1632,7 +1652,7 @@ static void do_reset(struct Scsi_Host *instance) ...@@ -1632,7 +1652,7 @@ static void do_reset(struct Scsi_Host *instance)
static int do_abort(struct Scsi_Host *instance) static int do_abort(struct Scsi_Host *instance)
{ {
unsigned char tmp, *msgptr, phase; unsigned char *msgptr, phase, tmp;
int len; int len;
int rc; int rc;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment