summaryrefslogtreecommitdiffstats
path: root/sys/dev/fdc/fdc.c
Commit message (Collapse)AuthorAgeFilesLines
* Bail out of fd_clone() if the parsed unit number doesn't match ourjoerg2003-01-111-0/+3
| | | | | | | | | | expectation. This solves the problem, where in a constellation with two (or more) drives, an attempt is made to access a device name for that device using a historic partition letter, like /dev/fd1c. This is supposed to create a symlink to the master device, but previously, the link was always created to /dev/fd0, even if the request was for fd1*.
* Remove calls to cdevsw_add(), they are dreprecated on this branch now.phk2002-12-281-6/+0
|
* Capitalize the first letter of device descriptionsmux2002-11-111-2/+2
| | | | for consistency with the rest of the drivers.
* Fix a probably rare and inconsequential memory leak.phk2002-10-021-1/+3
| | | | Spotted by: FlexeLint
* Add support for DIOCGMEDIASIZE and DIOCGSECTORSIZE.phk2002-09-301-40/+9
| | | | | | Remove all traces of disklabel. Sponsored by: DARPA & NAI Labs.
* Prefix private BIO commands with "FD" so people get a hint that theyphk2002-09-301-11/+11
| | | | | | are in fact private. Sponsored by: DARPA & NAI Labs.
* Be consistent about "static" functions: if the function is markedphk2002-09-281-4/+4
| | | | | | static in its prototype, mark it static at the definition too. Inspired by: FlexeLint warning #512
* Make FreeBSD "struct disklabel" agnostic, step 311 of 723:phk2002-09-201-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | Rename diskerr() to disk_err() for naming consistency. Drop the by now entirely useless struct disklabel argument. Add a flag argument for new-line termination. Fix a couple of printf-format-casts to %j instead of %l. Correctly print the name of all bio commands. Move the function from subr_disklabel.c to subr_disk.c, and from <sys/disklabel.h> to <sys/disk.h>. Use the new disk_err() throughout, #include <sys/disk.h> as needed. Bump __FreeBSD_version for the sake of the aac disk drivers #ifdefs. Remove unused disklabel members of softc for aac, amr and mlx, which seem to originally have been intended for diskerr() use, but which only rotted and got Copy&Pasted at least two times to many. Sponsored by: DARPA & NAI Labs.
* Suitably shrink a comment so it applies again.phk2002-09-151-5/+2
| | | | Submitted by: bde
* Fix a bug were a struct bio was freed and certain members subsequentlyphk2002-09-131-4/+3
| | | | examined. Use biowait() instead of DIY.
* Pass the physical instead of the logical block number injoerg2002-09-121-1/+1
| | | | | bp->bio_pblkno. Otherwise, all formats not using 512 byte physical sectors got screwed.
* After some comments from bde, rewrite the loops to avoid turning thejoerg2002-05-141-43/+29
| | | | | | | | | | | | | | | | | previously used "micro-optimization" (count-down loop) into a pessimization. Now the loops are written in the more natural count-up form. Also, while being there, i made the logic in out_fdc() similar to the logic in in_fdc(). The old implementation was a bit bogus anyway since it first tested the DIO bit and only afterwards the RQM bit. However, according to the description of the i82077, the DIO bit is only guaranteed to be valid once the RQM bit is set. Thus, the old implementatoin would have had the chance to misbehave on a controller that is implemented in accordance with the i82077 description (but is not bug-for-bug compatible). MFC after: 3 days
* style(9) changes before further editing that region:joerg2002-05-131-6/+7
| | | | | . add unnecessary parenthesis around return values . put body of an "if" statement onto a line of its own
* Hide the fd autoselection messages behind the bootverbose case so theyjoerg2002-05-121-3/+5
| | | | stop bothering people on their consoles.
* Increase the PIO timeout to approximately the value it used to havejoerg2002-05-121-3/+38
| | | | | | | | | | | | before rev 1.229 (~ 100 ms). According to bde, some (old) broken hardware could require it. In order to make timing more accurate than what could be achieved with a loop around DELAY(1), increase loop timing after the initial ~ 1 ms. Also, move the declaration of FDSTS_TIMEOUT out from fdreg.h into fd.c where it actually belongs to. MFC after: 2 days
* Change the PIO loops from a hard counter into a loop that calls DELAY()joerg2002-05-101-8/+14
| | | | | | | | | | | | in each cycle, with a tunable max cycle count defined in fdreg.h. This is said to fix the problem on some Compaq hardware (and perhaps on other machines using the Natsemi PC87317 chip) where the fdc(4) driver failed to operate at all. PR: kern/21397 Submitted by: Jung-uk Kim <jkim@niksun.com> MFC after: 3 days
* When reading a UFS-style label from a floppy, don't attempt to use ajoerg2002-04-021-1/+1
| | | | | | | | | "raw partition" of any kind since the floppy driver doesn't support UFS-style partitions at all. Reported by: "Crist J. Clark" <crist.clark@attbi.com> Reviewed by: bde MFC after: 3 days
* Change the suser() API to take advantage of td_ucred as well as do ajhb2002-04-011-4/+4
| | | | | | | | | | | | general cleanup of the API. The entire API now consists of two functions similar to the pre-KSE API. The suser() function takes a thread pointer as its only argument. The td_ucred member of this thread must be valid so the only valid thread pointers are curthread and a few kernel threads such as thread0. The suser_cred() function takes a pointer to a struct ucred as its first argument and an integer flag as its second argument. The flag is currently only used for the PRISON_ROOT flag. Discussed on: smp@
* Push BIO_FORMAT into a local hack inside the floppy drivers wherephk2002-03-261-0/+2
| | | | it belongs.
* Disksort will not "munge" requests, BIO_ORDERED or not, so removephk2002-02-221-4/+2
| | | | use of BIO_ORDERED.
* Change the test for _MACHINE_ARCH == i386 into #ifdef __i386__ since itjoerg2001-12-181-2/+8
| | | | | | otherwise breaks on the Alpha arch. I think this is wrong since i'd actually like to probe for a PC architecture, not for a particular CPU type. Anyway, now it's again the way it used to be.
* Remove PC98 code. This file is not used by PC98.nyan2001-12-161-17/+0
|
* Long promised major enhancement set for the floppy disk driver:joerg2001-12-151-274/+491
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | . The main device node now supports automatic density selection for commonly used media densities. So you can stuff your 1.44 MB and 720 KB media into your drive and just access /dev/fd0, no questions asked. It's all that easy, isn't it? :) . Device density handling has been completely overhauled. The old way of hardwired kernel density knowledge is no longer there. Instead, the kernel now implements 16 subdevices per drive. The first subdevice uses automatic density selection, while the remaining 15 devices are freely programmable. They can be assigned an arbitrary name of the form /dev/fd[:digit]+.[:digit:]{1,4}, where the second number is meant to either implement device names that are mnemonic for their raw capacity (as it used to be), or they can alternatively be created as "anonymous" devices like fd0.1 through fd0.15, depending on the taste of the administrator. After creating a subdevice, it is initialized to the maximal native density of the respective drive type, so it needs to be customized for other densities by using fdcontrol(8). Pseudo-partition devices (fd0a through fd0h) are still supported as symlinks. . The old hack to use flags 0x1 to always assume drive 0 were there is no longer supported; this is now supposed to be done by wiring the devices down from the loader via device flags. On IA32 architectures, the first two drives are looked up in the CMOS configuration records though. On PCMCIA (i. e., the Y-E Data controller of the Toshiba Libretto), a single drive is always assumed. . Other specialities like disabling the FIFO and not probing the drive at boot-time are selected by per-controller or per-drive flags, too. . Unit attentions (media has been changed) are supposed to be detected now; density autoselection only occurs after a unit attention. (Can be turned off by a per-drive flag, this will cause each Fdopen() to perform the autoselection.) . FM floppies can be handled now (on controllers that actually support it -- not all do these days). . Fdopen() can be told to avoid density selection by setting O_NONBLOCK; this leaves the descriptor in a half-opened state where only a few ioctls are accepted. This is necessary to run fdformat on a device that uses automatic density selection (since you cannot autoselect on an unformatted medium, obviously). . Just differentiate between a plain old NE765 and the enhanced chips, but don't try more; the existing code was wrong and only misdetected the chips anyway. BUGS and TODOs: . All documentation update still needs to be done. . Formatting not-so-standard format yields unpredictable results; i have yet to figure out why this happens. "Standard" formats like 720 and 1440 KB do work, however. . rc scripts are needed to setup device nodes with nonstandard densities (like the old /dev/fdN.MMM we used to have). . Obtaining device flags from the kernel environment doesn't work yet, thus currently only drives that are present in (IA32) CMOS are really detected. Someone who knows the odds and ends about device flags is needed here, i can't figure out what i'm doing wrong. . 2.88 MB still needs to be done.
* KSE Milestone 2julian2001-09-121-5/+5
| | | | | | | | | | | | | | Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
* Add ACPI attachments.msmith2001-08-301-0/+1
|
* Hrmpf. nyan's rev 1.25 commit to fdc.h crossed with my removal of it.joerg2001-07-141-0/+17
| | | | Back-integrate his (PC98) changes into fd.c.
* Yet another large non-function change.joerg2001-07-141-142/+271
| | | | | | | | | | | | | | | | | | | | . Integrate fdc.h into fd.c, with the removal of ft(4) there's no longer a reason to scatter things across two files. . Sanitize comments. Convert them into the style(9)-recommended multi-line form, make them sentences where apprpriate, etc. . Declare all functions on top, and declare them in the order they appear in the file. This order is totally chaotic, but Bruce convinced me that reordering the file wouldn't make it better either. . Kill a `possibly uninitialized' warning (only seen with -O2) in fd_read_status(). . Make the comments at return (0|1) statements in fdstate() consistent. . Nuke a ``keep the compiler happy'' dummy return at the end of fdstate(), gcc is smart enough to detect that it would never be reached anyway.
* Log when the user is turning debugging on/off.joerg2001-07-091-5/+9
| | | | | | | Also sanitize the TRACE* macros a bit so they syntactically behave like single C statements (even inside in `if' statement). Submitted by: des
* Hmpf, remove two variables that got unused by rev 1.214.joerg2001-07-091-2/+1
|
* Ouch, calculate correctly. With 300 rpm and 25 retries, it's 5 secondsjoerg2001-07-091-1/+1
| | | | till timeout.
* Remove parts of rev 1.211 again: do not delete our children iff theyjoerg2001-07-091-7/+0
| | | | | | haven't been probed successfully. It's a known bug that ISA hints processing instantiates those devices, and prematurely killing them has other unwanted side-effects.
* As des' example shows us, DMA overruns could happen in a situationjoerg2001-07-091-9/+37
| | | | | | | | where they will never succeed. Add a stop-gap measure that will at least eventually timeout the operation instead of retrying it indefinately. MFC after: 1 month
* Another large patchset from Bruce.joerg2001-07-081-158/+113
| | | | | | | | | | | | | | | Despite of a few cosmetic things like adding ``irritating silly parentheses'' around all return values, this mainly improves FDC reset handling by no longer gratuitously resetting the FDC all the time (which causes it to lose the notion of the current track) but only in case of errors, and it sanitizes the block and offset calculations in fdstrategy() and fdstate(). Some additional cleanup added by me, in particular the large switch in fdstate() now always uses return to break out, and no branch falls off the end of the switch statement anymore. Per Bruce's suggestion, removed M_NOWAIT from the malloc()s to simplify things. Submitted by: bde (mostly)
* More cleanup when detaching. Clone device entries will now bejoerg2001-07-041-17/+41
| | | | | | | | | | | | | | | | | | | | | destroyed properly (otherwise bad things would happen after a clone dev had been created, and the module was kldunloaded). Allocated children that have not successfully probed are being deleted again (otherwise fd0 and fd1 have always been allocated, even if only fd0 was acutally present, and fd1 even survived kldunloading the module). Still, kldunloading leaves remnants of the previously existing devices intact. Why doesn't it destroy all the devices? As a consequence, since dev->descr now points into no longer allocated memory, the system panics deep inside printf(9) when running devinfo(1) after kldunloading the module. Ideas sought... Also, when kldloading the module on a hints-populated isab0, this bus somehow has already created an fdc0 entry (a dummy) so the load attempt fails and will register fdc1 instead. What are those dummy entries for? Loading the module from the bootloader works, and it can be unloaded an re-loaded then later.
* Use the new-born BIO_CMD1 instead of fudging a bio_flag value for readingjoerg2001-06-291-116/+72
| | | | | | | | | | | | | | | | | the sector ID. Based on numerous comments made by Bruce, rewrite a good part of the old fdformat() function, and merge it with fdreadid() into a single unified fdmisccmd() function. Various style and a couple of more serious bugs fixed there. While i was at it, i also fixed the long-standing "TODO: don't allocate buffer on stack." in fdcioctl(), fixed a number of style bugs there, and finally implemented the FD_DEBUG ioctl command that has been advertised in <sys/fdcio.h> (formerly <machine/ioctl_fd.h>) for almost seven years now. ;-) Submitted by: bde (a lot of fixes for fdformat())
* This change slipped through hidden in a CVS conflict. Logically belongsjoerg2001-06-291-3/+3
| | | | to the previous commit (fix resource deallocation).
* First stab at fixing resource deallocation, and implementing fdc(4) asjoerg2001-06-291-10/+24
| | | | | | | | | | | a KLD. Still doesn't work well except in the PCMCIA case (now if only pccardd(8) could load and unload drivers dynamically...). Mainly, it tries to find fdc0 on the PCI bus for whatever obscure reasons, but i need someone who understands driver(9) to fix this. However, it's at least already better than before, and i'm tired of maintaining too many private changes in my tree, given the large patches bde submitted. :) Idea of a KLD triggered by: Michael Reifenberger <root@nihil.plaut.de>
* Merge in parts of a larger patchset i received from Bruce. Untestedjoerg2001-06-281-41/+38
| | | | | | | | | | | | | | | | | | | by now (except of a compile test), but i believe this to contain no actual functional changes. . Fix the copyright of the Regents i accidentally broke in rev 1.197 (although only a very small part of the original driver survived at all...). . Bump MAX_CYLINDER since some obscure formats really use more than 80 cylinders. . Correctly handle BIO_FORMAT which used to be a bitmask but is now a BIO command of its own. . Numerous stylistic fixes. Submitted by: bde
* Implement a new ioctl command for floppies: FD_READIDjoerg2001-06-261-8/+92
| | | | | Reads one sector ID field from a given track. Useful for analyzing floppies.
* Some more cosmetics: kill another couple of K&R function definitionsjoerg2001-06-261-28/+4
| | | | | that survived from old days, fix style of return type in fdcpio(), kill old Emacs hints that are no longer working that way anyway.
* Cosmetics:joerg2001-06-201-33/+3
| | | | | | | | | | . staticize out_fdc(), there's no longer an ft(4) driver sharing its use . remove in_fdc(), has been used by ft(4) last time, long since obsoleted by fd_in() . move the declaration of fd_clone() to where most of the other function declarations are . de-__P()ify fd_clone(), it's been the only _P()ed function in the entire file
* Hints overhaul:peter2001-06-121-6/+5
| | | | | | | | | - Replace some very poorly thought out API hacks that should have been fixed a long while ago. - Provide some much more flexible search functions (resource_find_*()) - Use strings for storage instead of an outgrowth of the rather inconvenient temporary ioconf table from config(). We already had a fallback to using strings before malloc/vm was running anyway.
* Cosmetics:joerg2001-06-111-16/+22
| | | | | | | | | . remove stale comments and a stale #define (from the old days of ft(4)) . make MAX_SEC_SIZE (used in isa_dmainit()) a #define . fix a typo in a string . use 0 as the blocksize in devstat_add_entry(), since the actual blocksize is unknown (devstat(9) suggests to use 0 in that case)
* Nuke the various poorly maintained copies of ioctl_fd.h. The file isjoerg2001-06-061-1/+1
| | | | | not machine-dependant, thus it has been moved out (repo-copied) into <sys/fdcio.h>.
* Make the FDC (state machine) state an enum, as opposed to an intjoerg2001-06-051-16/+0
| | | | abusing a bunch of #defines, for clarity and better debugging support.
* Fix my email address. I accidentally cut'npasted the wrong (old)joerg2001-06-031-1/+1
| | | | hostname laste time.
* Don't lie to diskerr() now that it listens to us.phk2001-05-251-5/+0
|
* Implement a few more floppy ioctl commands and IO options, namely:joerg2001-05-141-23/+40
| | | | | | | | | | | | | | | | | | | | | . FD_CLRERR clears the error counter, thus re-enables kernel error printf()s, . FD_GSTAT obtains the last FDC operation state, if any, . FDOPT_NOERRLOG (temporarily) turns off kernel printf() floppy error logging, . FDOPT_NOERROR makes the kernel ignore an FDC error, thus can enable the transfer of an erroneous sector to the user application All options are being cleared on (last) close. Prime consumer of the last features will be fdread(1), to be committed shortly. (FD_CLRERR should be wired into fdcontrol(8), but then fdcontrol(8) needs a major rewrite anyway.)
* Actually biofinish(struct bio *, struct devstat *, int error) is more generalphk2001-05-061-4/+2
| | | | | | than the bioerror(). Most of this patch is generated by scripts.
* Undo part of the tangle of having sys/lock.h and sys/mutex.h included inmarkm2001-05-011-2/+4
| | | | | | | | | | | other "system" header files. Also help the deprecation of lockmgr.h by making it a sub-include of sys/lock.h and removing sys/lockmgr.h form kernel .c files. Sort sys/*.h includes where possible in affected files. OK'ed by: bde (with reservations)
OpenPOWER on IntegriCloud