By Gary10 - usenet poster
I have a PAS-16 sound card which I am tring to use as my SCSI H-Drive
controller. Everything seems beautiful on bootup of the Slackware SCSI
bootdisk, it recgonizes the sound card and the Quantum 40M harddrive connected
to it, the problem comes when it tries to read the partition. It says
"Checking Partition.", the drive light cones on and that is it! the light
remains on and nothing else happends. I don't even hear the steper motor
going, but the drive is spinning. Any soulutions?
Jay Barbee
[Linux Newbie] :)
Solution #1
posted on Aug 02, 2007
Bray - usenet poster
Rank:
Apprentice
Rating: 0%, 0 votes
Rating: 0%, 0 votes
It works fine on my system with a Trantor T128 board, and also
on John Wiedman's system with a PAS16 board. So, either John
introduced a timing problem when he wrote the PAS16 wrapper
which didn't manifest itself on his system, or he ran into
something that would have been on the hardware erratta sheet
had one existed.
If your system hangs while a SCSI device is connected on the bus, if
you want to access your SCSI devices without power cycling when
you reboot, you need to do something like this :
1. If BUS FREE does not exist, wait until some timeout elapses.
2. If BUS FREE does not exist,
attempt to abort the currently established nexus
- Assert ATN
- Wait for REQ
- If MSG, C/D, I/O != MESSAGE OUT PHASE, then handshake
for the current byte transfer since the target cannot change
phases after REQ was asserted.
- Assert ACK
- Wait for REQ to go false
- Desert ACK
- Wait for REQ, we should have MESSAGE OUT
- Send ABORT message using NCR5380_transfer_pio
3. If BUS FREE does not exist, wait until some timeout elapses.
4. If BUS FREE does not exist, reset the SCSI bus
- Set PHASE bits in TARGET COMMAND REGISTER to the current SCSI phase
- assert RST
- wait
- clear RST
5. If BUS FREE does not exist, wait until some timeout elapses.
6. If BUS FREE still does not exist, your SCSI devices are broken.
Get the docs from Media Vision, and debug the driver. Otherwise, live
with the poor performance
Obviously, a sub-optimal solution - I get about 550k/sec through the
filesystem with my Trantor board using the Pseudo-DMA option. CPU
usage can also be a lot lower too.
Beyond totaling about 3900 lines of code in my development
kernel, there's nothing inherently complicated about the code.
Start with the pas16.c pseudo DMA read function -
/*
* Function : int NCR5380_pread (struct Scsi_Host *instance,
* unsigned char *dst, int len)
*
* Purpose : Fast 5380 pseudo-dma read function, transfers len bytes to
* dst
*
* Inputs : dst = destination, len = length in bytes
*
* Returns : 0 on success, non zero on a failure such as a watchdog
* timeout.
*/
static inline int NCR5380_pread (struct Scsi_Host *instance, unsigned char *dst,
int len) {
register unsigned char *d = dst;
register unsigned short reg = (unsigned short) (instance- P_DATA_REG_OFFSET);
register i = len;
+ /*
+ * Supposedly, P_ST_RDY reflects the status of the NCR5380 DRQ
+ * line. Check to make sure it becomes 0 when DRQ is asserted
+ * on the NCR5380 chip
+ */
while ( inb(instance-
for (; i; --i) {
+ /*
+ * Add a check for a timeout here, perhaps using jiffies so
+ * you aren't dependant on the timeout code functioning correctly
+ */
#if 1
while ( inb(instance- #endif
*d++ = (unsigned char) inb(reg);
}
+ /*
+ * Add a printk here letting you know you've successfully exited the
+ * pread function
+ */
if ( inb(instance- outb( P_TS_CT, instance- printk("scsi%d : watchdog timer fired in NCR5480_pread()\n",
instance- return -1;
} else
return 0;
If after making the various suggested changes you haven't isolated the
problem, move to the NCR5380_transfer_dma function and add similar
debugging code.
The exact changes are left as an exercise for the reader.
As far as I can tell, there are four ways it can get fixed :
1. Fix it yourself. Get documentation from NCR, Mediavision, and if
you have questions concerning my code, mail them to me - I usually
answer them if they don't get burried in my inbox. If you suspect
that your mail got burried, try again. I'll also mail out a copy
of the patches I sent to Linus which didn't make it into the
kernel, that contain various debugging enhancements, bus unwedging
code, and other fun things.
2. Come up with a spare PAS-16 board, hope that I can reproduce your
problem on my system, and convince me that you're paying me enough
for me to fix your problem and postpone debugging the more
interesting NCR53c810 driver, finishing a more time critical
magazine article, and getting my lecture notes done for a
conference so I can spend June driving liter bikes and windsurfing
rather than in front of a computer running vi and roff.
3. Buy a Yggdrasil CDROM, and take advantage of their $500 guaranteed
bug fix program if they still offer it.
4. Find another Guru.
I suspect that you'll want to use option #1
Take a look at the copyright information in the comments at
the top of the various source files I wrote -
* Copyright 1993, Drew Eckhardt
* Visionary Computing
* (Unix and Linux consulting and custom programming)
*
and you'll notice an email address which actually works. Try it
some time, ask a concise, specific question about my code or
make a request for the later version with better debugging
defines, the bus unwedging code, etc. and you might be pleased
with the results.
on John Wiedman's system with a PAS16 board. So, either John
introduced a timing problem when he wrote the PAS16 wrapper
which didn't manifest itself on his system, or he ran into
something that would have been on the hardware erratta sheet
had one existed.
If your system hangs while a SCSI device is connected on the bus, if
you want to access your SCSI devices without power cycling when
you reboot, you need to do something like this :
1. If BUS FREE does not exist, wait until some timeout elapses.
2. If BUS FREE does not exist,
attempt to abort the currently established nexus
- Assert ATN
- Wait for REQ
- If MSG, C/D, I/O != MESSAGE OUT PHASE, then handshake
for the current byte transfer since the target cannot change
phases after REQ was asserted.
- Assert ACK
- Wait for REQ to go false
- Desert ACK
- Wait for REQ, we should have MESSAGE OUT
- Send ABORT message using NCR5380_transfer_pio
3. If BUS FREE does not exist, wait until some timeout elapses.
4. If BUS FREE does not exist, reset the SCSI bus
- Set PHASE bits in TARGET COMMAND REGISTER to the current SCSI phase
- assert RST
- wait
- clear RST
5. If BUS FREE does not exist, wait until some timeout elapses.
6. If BUS FREE still does not exist, your SCSI devices are broken.
Get the docs from Media Vision, and debug the driver. Otherwise, live
with the poor performance
Obviously, a sub-optimal solution - I get about 550k/sec through the
filesystem with my Trantor board using the Pseudo-DMA option. CPU
usage can also be a lot lower too.
Beyond totaling about 3900 lines of code in my development
kernel, there's nothing inherently complicated about the code.
Start with the pas16.c pseudo DMA read function -
/*
* Function : int NCR5380_pread (struct Scsi_Host *instance,
* unsigned char *dst, int len)
*
* Purpose : Fast 5380 pseudo-dma read function, transfers len bytes to
* dst
*
* Inputs : dst = destination, len = length in bytes
*
* Returns : 0 on success, non zero on a failure such as a watchdog
* timeout.
*/
static inline int NCR5380_pread (struct Scsi_Host *instance, unsigned char *dst,
int len) {
register unsigned char *d = dst;
register unsigned short reg = (unsigned short) (instance- P_DATA_REG_OFFSET);
register i = len;
+ /*
+ * Supposedly, P_ST_RDY reflects the status of the NCR5380 DRQ
+ * line. Check to make sure it becomes 0 when DRQ is asserted
+ * on the NCR5380 chip
+ */
while ( inb(instance-
for (; i; --i) {
+ /*
+ * Add a check for a timeout here, perhaps using jiffies so
+ * you aren't dependant on the timeout code functioning correctly
+ */
#if 1
while ( inb(instance- #endif
*d++ = (unsigned char) inb(reg);
}
+ /*
+ * Add a printk here letting you know you've successfully exited the
+ * pread function
+ */
if ( inb(instance- outb( P_TS_CT, instance- printk("scsi%d : watchdog timer fired in NCR5480_pread()\n",
instance- return -1;
} else
return 0;
If after making the various suggested changes you haven't isolated the
problem, move to the NCR5380_transfer_dma function and add similar
debugging code.
The exact changes are left as an exercise for the reader.
As far as I can tell, there are four ways it can get fixed :
1. Fix it yourself. Get documentation from NCR, Mediavision, and if
you have questions concerning my code, mail them to me - I usually
answer them if they don't get burried in my inbox. If you suspect
that your mail got burried, try again. I'll also mail out a copy
of the patches I sent to Linus which didn't make it into the
kernel, that contain various debugging enhancements, bus unwedging
code, and other fun things.
2. Come up with a spare PAS-16 board, hope that I can reproduce your
problem on my system, and convince me that you're paying me enough
for me to fix your problem and postpone debugging the more
interesting NCR53c810 driver, finishing a more time critical
magazine article, and getting my lecture notes done for a
conference so I can spend June driving liter bikes and windsurfing
rather than in front of a computer running vi and roff.
3. Buy a Yggdrasil CDROM, and take advantage of their $500 guaranteed
bug fix program if they still offer it.
4. Find another Guru.
I suspect that you'll want to use option #1
Take a look at the copyright information in the comments at
the top of the various source files I wrote -
* Copyright 1993, Drew Eckhardt
* Visionary Computing
* (Unix and Linux consulting and custom programming)
*
and you'll notice an email address which actually works. Try it
some time, ask a concise, specific question about my code or
make a request for the later version with better debugging
defines, the bus unwedging code, etc. and you might be pleased
with the results.
Was this solution helpful? Show your Appreciation by rating it:
Solution #2
posted on Aug 02, 2007
paulrmc - usenet poster
Rank:
Apprentice
Rating: 0%, 0 votes
Rating: 0%, 0 votes
John Y Barbee () wrote:
: I have a PAS-16 sound card which I am tring to use as my SCSI H-Drive
: controller. Everything seems beautiful on bootup of the Slackware SCSI
: bootdisk, it recgonizes the sound card and the Quantum 40M harddrive connected
: to it, the problem comes when it tries to read the partition. It says
: "Checking Partition.", the drive light cones on and that is it! the light
: remains on and nothing else happends. I don't even hear the steper motor
: going, but the drive is spinning. Any soulutions?
:
: Jay Barbee
: [Linux Newbie] :)
:
There's nothing wrong with your setup. I've had the same problem since
version .99 v 05 (or something that low.) The problem is with PSEUDO_DMA.
For some stupid reason, it locks up the hard disk and just does nothing
With my setup, I have to power down the computer and power-up again in order
for my PAS-16 to recognize a HD is there (if I don't and jsut reset, the
HD light stays on and not even SCSI works under DOS knows anything is there).
There's a lot of people out there with the same problem (I've been reading
the posts for some time now in hopes for a fix but it's just a lot of people
saying 'PAS-16 locks up on partition check. What next?'.
I do know that if you remove PSEUDO_DMA from the include line of your
PAS16 driver source and re-compile, it will work...but you'll hate it.
It's about as slow as a really old 8-bit MFM on a 4.77 mhz PC. (slower than
a seagate ST-225.)
It's almost impossible trying to debug Drew's code (thy guy who made
the driver).. I spent a whole week on it and didn't get very far..It's really
broken up.
I think the only way to get this problem fixed is to actually get Drew's
attention somehow and for all of us tell him that his driver doesn't work
with a hard drive (for pseudo dma). Maybee get a conference together ??
Where are you Drew ?
--
Jianfang Li
CS dept. MTU
: I have a PAS-16 sound card which I am tring to use as my SCSI H-Drive
: controller. Everything seems beautiful on bootup of the Slackware SCSI
: bootdisk, it recgonizes the sound card and the Quantum 40M harddrive connected
: to it, the problem comes when it tries to read the partition. It says
: "Checking Partition.", the drive light cones on and that is it! the light
: remains on and nothing else happends. I don't even hear the steper motor
: going, but the drive is spinning. Any soulutions?
:
: Jay Barbee
: [Linux Newbie] :)
:
There's nothing wrong with your setup. I've had the same problem since
version .99 v 05 (or something that low.) The problem is with PSEUDO_DMA.
For some stupid reason, it locks up the hard disk and just does nothing
With my setup, I have to power down the computer and power-up again in order
for my PAS-16 to recognize a HD is there (if I don't and jsut reset, the
HD light stays on and not even SCSI works under DOS knows anything is there).
There's a lot of people out there with the same problem (I've been reading
the posts for some time now in hopes for a fix but it's just a lot of people
saying 'PAS-16 locks up on partition check. What next?'.
I do know that if you remove PSEUDO_DMA from the include line of your
PAS16 driver source and re-compile, it will work...but you'll hate it.
It's about as slow as a really old 8-bit MFM on a 4.77 mhz PC. (slower than
a seagate ST-225.)
It's almost impossible trying to debug Drew's code (thy guy who made
the driver).. I spent a whole week on it and didn't get very far..It's really
broken up.
I think the only way to get this problem fixed is to actually get Drew's
attention somehow and for all of us tell him that his driver doesn't work
with a hard drive (for pseudo dma). Maybee get a conference together ??
Where are you Drew ?
--
Jianfang Li
CS dept. MTU
Was this solution helpful? Show your Appreciation by rating it:
Suggest a new solution for this problem
Post a New problem for Tamarack WATSON Single Port Remote
Email this problem
Post a New problem for Tamarack WATSON Single Port Remote
Email this problem
Can you Help with these Kitchen Hoods problems?
Repair Service
Find Kitchen Hood Repairman Near You:

