Date: Fri, 15 Sep 1995 18:15:22 -0500 From: Jon Loeliger <jdl@chrome.onramp.net> To: Josh Littlefield <josh@American.COM> Cc: current@freebsd.org Subject: More ATAPI CD issues, and some old ones too! Message-ID: <199509152315.SAA08077@chrome.onramp.net> In-Reply-To: Your message of "Fri, 15 Sep 1995 18:37:04 EDT." <199509152237.SAA19750@mozart.american.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Apparently, Josh Littlefield scribbled: > > Hmm. Not sure I agree here. My POS NEC 260 fails this test badly. > > Not sure why. I (w)hacked it out to get even vague functionality... > > Wow. Writable byte count registers are pretty much mandatory for atapi to > work at all, since they are the way of communicating ATAPI packet sizes and > data lengths. Yea, I believe it is writable, but... > The best explanation I can think of is that this is not really a good test. Right. > I'm not sure there is really any guarantee that this register will read the > same as its written. For ATAPI, one writes it to indicate the size of data > desired to be read or written. One reads it AFTER SENDING A PACKET COMMAND, > and when BSY is gone to find out about the subsequent device needs for data > transfer. Even the length of time the register is supposed to contain info > the device has generated is only until the first data register access. > > Other parts of the spec indicate that the device should place its "signature" > > (0xEB14) in the cnt_hi/lo registers and maintain it until the first ATAPI > command is recieved, which might explain the need to generalize this test to > checking for != 0xFF after the write. All in all, sounds like a bogus "test" >. And in hackers, Bruce added to the fray: > jdl wrote: > >So who can tell me any details about that lovely weak check for R/W > >registers that appears to be failing for me? Simple things like: > > > - Is this a valid register for a CDROM drive too? Ie, is this check > > tacitly assuming a hard disk beneath it? > > - Is it subject to timing problems? > > - It *claims* to be "too weak", however it appears to be too strong! > > It's too weak for ST506...EIDE controllers with normal drives attached. > These all have read/write registers, so the inb() should return what > was written. That used to be tested for, but someone weakened the > test without documenting why. I don't know what happens for CDROM > drives. > > The point of the test is to attempt to limit the damage if there is > a device other than an ST506...EIDE controller behind the port. It > is far too weak for that (if 0xff wasn't so magic, then the test > would have much less than a 1/256 chance of detecting conflicts). > Even if it tested for `== 0xa5', then any device with a read/write > port at the probed address would pass the test. > > The test is very sloppy. It should do something like: > > int > is_rw_port(port) > u_int_port; > { > u_char in1, in2, was; > > DELAY(5); > was = inb(port); > DELAY(5); > outb(port, 0xa5); > DELAY(5); > (void)inb(0x20); /* attempt to eliminate bus echoes */ > DELAY(5); > in1 = inb(port); > DELAY(5); > outb(port, 0x5a); > DELAY(5); > (void)inb(0x20); > DELAY(5); > in2 = inb(port); > DELAY(5); > outb(port, was); > DELAY(5); > return (in1 == 0xa5 && in2 == 0x5a); > } > ... > if (!is_rw_port(du->dk_port + wd_cyl_lo)) > goto nodevice; > > Then the test would be stronger and your CDROM would be sure to fail :-). Leave it Bruce to be succinct on that final point... :-) So, I'm not sure what to do there yet... If this suddenly clears up, feel free to let me know! Also, it appears that the NEC-260 might have been available before the spec gelled, so I'm apt to expect it to be a tad out of spec with respect to the ATAPI spec. > > Hmm.. You may need Serge's latest and greates patch that I alude to above. > > With minor work, I could dredge this up for you if you don't have it. > > I don't have this, and it doesn't appear that -current does either. Could > you send it? Check. Sent separately to only Josh. If this should be commited, we need to find a committer for it.... Serge may have it wrapped and ready to go too. Dunno. > >From some behavior I've noticed where the drive gets stuck in an aborted > command state (and stays there across a reboot), Ick. Maybe that's part of the reason for the "reset test"? jdl
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199509152315.SAA08077>