summaryrefslogtreecommitdiffstats
path: root/sys/isa/fd.c
Commit message (Collapse)AuthorAgeFilesLines
* Add PHK's make_dev() into more places where DEVFS used to bejulian1999-08-271-1/+14
| | | | | | | | | hooked in directly. Alpha change checked by: Matthew Jacob <mjacob@feral.com> i4b ISDN changes checked by: Udo Schweigert <ust@cert.siemens.de> and Hellmuth Michaelis <hm@hcs.de> PC98 changes checked by: Takahashi Yoshihiro <nyan@FreeBSD.org>
* Convert DEVFS hooks in (most) drivers to make_dev().phk1999-08-231-119/+1
| | | | | | | | | | | | | | | | Diskslice/label code not yet handled. Vinum, i4b, alpha, pc98 not dealt with (left to respective Maintainers) Add the correct hook for devfs to kern_conf.c The net result of this excercise is that a lot less files depends on DEVFS, and devtoname() gets more sensible output in many cases. A few drivers had minor additional cleanups performed relating to cdevsw registration. A few drivers don't register a cdevsw{} anymore, but only use make_dev().
* Spring cleaning around strategy and disklabels/slices:phk1999-08-141-5/+4
| | | | | | | | | | | | | | Introduce BUF_STRATEGY(struct buf *, int flag) macro, and use it throughout. please see comment in sys/conf.h about the flag argument. Remove strategy argument from all the diskslice/label/bad144 implementations, it should be found from the dev_t. Remove bogus and unused strategy1 routines. Remove open/close arguments from dssize(). Pick them up from dev_t. Remove unused and unfinished setgeom support from diskslice/label/bad144 code.
* Revert rev 1.149. Bruce convinced me that the problem already disappearedjoerg1999-07-291-5/+1
| | | | by the fix in rev 1.120, which i wasn't immediately aware of.
* Alter the behavior of sys/kern/subr_bus.c:device_print_child()mdodd1999-07-291-3/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - device_print_child() either lets the BUS_PRINT_CHILD method produce the entire device announcement message or it prints "foo0: not found\n" Alter sys/kern/subr_bus.c:bus_generic_print_child() to take on the previous behavior of device_print_child() (printing the "foo0: <FooDevice 1.1>" bit of the announce message.) Provide bus_print_child_header() and bus_print_child_footer() to actually print the output for bus_generic_print_child(). These functions should be used whenever possible (unless you can just use bus_generic_print_child()) The BUS_PRINT_CHILD method now returns int instead of void. Modify everything else that defines or uses a BUS_PRINT_CHILD method to comply with the above changes. - Devices are 'on' a bus, not 'at' it. - If a custom BUS_PRINT_CHILD method does the same thing as bus_generic_print_child(), use bus_generic_print_child() - Use device_get_nameunit() instead of both device_get_name() and device_get_unit() - All BUS_PRINT_CHILD methods return the number of characters output. Reviewed by: dfr, peter
* Hack to work around a NULL pointer dereferencation that can be triggeredjoerg1999-07-211-1/+5
| | | | | | | | by removing a floppy that as being operated on. The spagghetti is hardly understandable at all anymore, so i can't 100 % ascertain this is really the Right Thing to do, maybe our new floppy driver maintainer, Jesus Monroy Jr can do this. :-))
* Remove cmaj and bmaj args from DEV_DRIVER_MODULE.phk1999-07-041-3/+2
|
* Convert buffer locking from using the B_BUSY and B_WANTED flags to usingmckusick1999-06-261-2/+6
| | | | | | | lockmgr locks. This commit should be functionally equivalent to the old semantics. That is, all buffer locking is done with LK_EXCLUSIVE requests. Changes to take advantage of LK_SHARED and LK_RECURSIVE will be done in future commits.
* * Change include file locations.dfr1999-05-311-11/+16
| | | | | * Fix some misunderstandings about the return value of resource_int_value(). * Make it build on alpha (doesn't work yet...)
* This commit should be a extensive NO-OP:phk1999-05-301-8/+23
| | | | | | | | | | | | | Reformat and initialize correctly all "struct cdevsw". Initialize the d_maj and d_bmaj fields. The d_reset field was not removed, although it is never used. I used a program to do most of this, so all the files now use the same consistent format. Please keep it that way. Vinum and i4b not modified, patches emailed to respective authors.
* No support for pnp yet.dfr1999-05-301-2/+5
|
* Fixed reset handling for motor off resets. I first fixed this togetherbde1999-05-111-2/+3
| | | | | | | with other reset handling in rev.1.83 but broke it in rev.1.120. The breakage didn't seem to cause any problems even on the system which had problems ("extra" interrupts and botched handling thereof) before rev.1.83. It only affects multi-floppy systems anyway.
* Move the declaration of the interrupt type from the driver structuredfr1999-05-081-5/+3
| | | | to the BUS_SETUP_INTR call.
* GC unused #define id_physid id_scsiidpeter1999-05-081-7/+1
|
* Continue where Julian left off in July 1998:phk1999-05-071-2/+2
| | | | | | | | | | | | | | Virtualize bdevsw[] from cdevsw. bdevsw() is now an (inline) function. Join CDEV_MODULE and BDEV_MODULE to DEV_MODULE (please pay attention to the order of the cmaj/bmaj arguments!) Join CDEV_DRIVER_MODULE and BDEV_DRIVER_MODULE to DEV_DRIVER_MODULE (ditto!) (Next step will be to convert all bdev dev_t's to cdev dev_t's before they get to do any damage^H^H^H^H^H^Hwork in the kernel.)
* Introduce two functions: physread() and physwrite() and use these directlyphk1999-05-071-17/+2
| | | | | | in *devsw[] rather than the 46 local copies of the same functions. (grog will do the same for vinum when he has time)
* remove b_proc from struct buf, it's (now) unused.phk1999-05-061-2/+1
| | | | Reviewed by: dillon, bde
* Disable FDC_YE - it's broken at present (breaking LINT) and awaiting somepeter1999-05-021-17/+26
| | | | | pccard fixups. Make DEVFS compile, it breaks LINT.
* Suser() simplification:phk1999-04-271-2/+2
| | | | | | | | | | | | | | | | | | | 1: s/suser/suser_xxx/ 2: Add new function: suser(struct proc *), prototyped in <sys/proc.h>. 3: s/suser_xxx(\([a-zA-Z0-9_]*\)->p_ucred, \&\1->p_acflag)/suser(\1)/ The remaining suser_xxx() calls will be scrutinized and dealt with later. There may be some unneeded #include <sys/cred.h>, but they are left as an exercise for Bruce. More changes to the suser() API will come along with the "jail" code.
* Bring the 'new-bus' to the i386. This extensively changes the way thepeter1999-04-161-521/+618
| | | | | | | | | | | | | | | | | | i386 platform boots, it is no longer ISA-centric, and is fully dynamic. Most old drivers compile and run without modification via 'compatability shims' to enable a smoother transition. eisa, isapnp and pccard* are not yet using the new resource manager. Once fully converted, all drivers will be loadable, including PCI and ISA. (Some other changes appear to have snuck in, including a port of Soren's ATA driver to the Alpha. Soren, back this out if you need to.) This is a checkpoint of work-in-progress, but is quite functional. The bulk of the work was done over the last few years by Doug Rabson and Garrett Wollman. Approved by: core
* Use reference counted PHOLD/PRELE rather than the P_PHYSIO flag.peter1999-04-061-3/+3
|
* Add a prioritization field to the devstat_add_entry() call so thatken1999-02-101-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | peripheral drivers can determine where in the devstat(9) list they are inserted. This requires recompilation of libdevstat, systat, vmstat, rpc.rstatd, and any ports that depend on the devstat code, since the size of the devstat structure has changed. The devstat version number has been incremented as well to reflect the change. This sorts devices in the devstat list in "more interesting" to "less interesting" order. So, for instance, da devices are now more important than floppy drives, and so will appear before floppy drives in the default output from systat, iostat, vmstat, etc. The order of devices is, for now, kept in a central table in devicestat.h. If individual drivers were able to make a meaningful decision on what priority they should be at attach time, we could consider splitting the priority information out into the various drivers. For now, though, they have no way of knowing that, so it's easier to put them in an easy to find table. Also, move the checkversion() call in vmstat(8) to a more logical place. Thanks to Bruce and David O'Brien for suggestions, for reviewing this, and for putting up with the long time it has taken me to commit it. Bruce did object somewhat to the central priority table (he would rather the priorities be distributed in each driver), so his objection is duly noted here. Reviewed by: bde, obrien
* Update the pccard hooks to use a module style declaration instead.peter1999-01-191-11/+3
|
* Fixed corruption of the fd buffer queue. Once upon a time, the activebde1999-01-151-6/+13
| | | | | | | | | | buffer had to be left on the head of the queue for [bufq]disksort() to sort against. This isn't right for devices that can support multiple active i/o's, and only the fd driver did it. "Fixing" this in rev.1.36 of ufs_disksubr.c broke the fd driver in much the same way as rev.1.52 of <sys/buf.h> broke it (see rev.1.119). Bug reported and fix tested by: dt
* Pre 3.0 branch cleanup casualty #6: ftphk1998-12-271-82/+2
|
* Fixed LINT breakage in previous commit. Option FDC_YE enabled abde1998-12-141-6/+6
| | | | | syntax error. Options FDC_YE and DEVFS together enabled references to a nonexistent variable and calls of a nonexistent function.
* Add support for the YE-Data external PCMCIA floppy driver. Thisimp1998-12-121-7/+360
| | | | | | | | | | | | | | | | | floppy is used on the toshiba Libretto line of subnotebook computers. It differs from a normal floppy in that you must use PIO rather than DMA to transfer the data. To enable this, you must add options "FDC_YE" to your kernel. I don't have a machine that has a floppy and a pcmcia slot to test to make sure that this doesn't impact normal floppy units, so I've left this as an option. I have ported this to -current and made an attempt to ensure that the indentation conforms to style(9), aka the bruce filter. Reviewed by: nate, markm Submitted by: David Horwitt (dhorwitt@ucsd.edu)
* Rename one of the two devfs_link's to devfs_makelink.eivind1998-12-101-3/+3
|
* The "easy" fixes for compiling the kernel -Wunused: remove unreferenced staticarchie1998-12-071-4/+1
| | | | and local variables, goto labels, and functions declared but not defined.
* Examine all occurrences of sprintf(), strcat(), and str[n]cpy()archie1998-12-041-3/+3
| | | | | | | | | | | | | | for possible buffer overflow problems. Replaced most sprintf()'s with snprintf(); for others cases, added terminating NUL bytes where appropriate, replaced constants like "16" with sizeof(), etc. These changes include several bug fixes, but most changes are for maintainability's sake. Any instance where it wasn't "immediately obvious" that a buffer overflow could not occur was made safer. Reviewed by: Bruce Evans <bde@zeta.org.au> Reviewed by: Matthew Dillon <dillon@apollo.backplane.com> Reviewed by: Mike Spengler <mks@networkcs.com>
* Initialize isa_devtab entries for interrupt handlers in individualbde1998-10-221-2/+4
| | | | | | | device drivers, not in ioconf.c. Use a different hack in isa_device.h so that a new config(8) is not required yet. pc98 parts approved by: kato
* Nuke uninitialized varible fd from retrier(). Change the devstat codegibbs1998-09-151-3/+2
| | | | to reference fdc->fd instead.
* Update system to new device statistics code.gibbs1998-09-151-20/+30
| | | | | Submitted by: "Kenneth D. Merry" <ken@plutotech.com> mike@smith.net.au (Mike Smith)
* Remove the SLICE code.sos1998-09-141-245/+1
| | | | | This clearly needs alot more thought, and we dont need this to hunt us down in 3.0-RELEASE.
* Fixed error handling:bde1998-07-291-56/+61
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - Call isa_dmadone() whenever necessary to stop DMA and/or free bounce buffers. Undead DMA corrupted the malloc freelist fairly consistently in the following configuration: SLICE kernel, 2 floppy drives, no disk in fd0, disk in fd1. - Don't call fdc_reset() from fd_timeout(). Doing so gave an "extra" interrupt which was usually misinterpreted as being for completion of the next FDC command; the interrupt for completion of the next FDC command was then usually misinterpreted... There were further complications for interrupts latched by the soft-spl mechanism so that they were delivered after all the h/w interrupts went away. This caused at least wrong head settle delays and may be why the FreeBSD floppy driver seems to munch floppies more than most floppy drivers. The reset was unnecessary anyway in cases that didn't have the bug described next, since is was repeated a little later for the IOTIMEDOUT state. The state machine has complications to handle resets correctly, so just use it. - Don't call retrier() from fd_timeout(). The IOTIMEDOUT state needs to be processed next, and it isn't valid to set to that state if retrier() has aborted the current transfer. Doing so caused null pointer panics after the previous bug was fixed. Improved error handling: - If an i/o is aborted, arrange to reset in the state machine before doing the next i/o. New fdc flag for this. This fixes spurious warnings and lengthy busy-waiting for the next i/o. - Split STARTRECAL into RESETCOMPLETE and STARTRECAL and only check for the results from reset if we actually reset. This fixes spurious warnings for other paths to STARTRECAL. [Oops, it may break reset handling for motor-off resets.] Cleanups in fd_timeout(): - Renamed to fd_iotimeout() to make it clearer that it is only used for i/o. - Don't handle the bp == 0 case. This case can't happen for i/o. - Don't check for controller-busy. We know it must be. - Don't print anything. retrier() already prints too much for normal errors. - Fudge the state differently so that the state machine advances fdc->retry and the status is invalid (perhaps this should fudge a valid state like the one for WP). - Style fixes.
* Fixed error handling after a seek error that can't happen. When thebde1998-07-181-1/+3
| | | | | | | | | | | | | | | | controller reports a successful seek, it is very unlikely to report seeking to a cylinder other than the one requested, but we check for this, and botched the error handling for the requested_cylinder != 0 case. This error happened when the bug fixed in rev.1.52 of <sys/buf.h> caused the head of buffer queue to change to one starting on a different cylnder - the requested cylinder was found, but it wasn't what we thought we requested. The fix is simply to arrange to reset the state machine. Corruption of the buffer queue seems to only have been a problem in the floppy driver. Other drivers dequeue the head of the queue before doing physical i/o on it, so the corruption at worse broke the elevator sort order. Dequeueing breaks it anyway.
* The ioctl request arg is unsigned long, so don't attempt to pass itbde1998-07-151-2/+2
| | | | around as signed int.
* SLICE probing becomes asynchronous. It can now be triggered byjulian1998-07-131-6/+3
| | | | | | | | interupt level events. This needs a lot of cleanup, but has been working here for a month or two.. originally needed for CAM integration but that hasn't happenned yet. The probing state machines for each handler should be replaced by a more generic state-service. It's still quite messy in there..
* Don't pretend to support ix86's with 7-bit ints by using longs just tobde1998-07-111-4/+4
| | | | ensure 8-bit variables. Doing so mainly bogotified some printf formats.
* There is no such thing any more as "struct bdevsw".julian1998-07-041-8/+27
| | | | | | | | | | | | | | | | | | There is only cdevsw (which should be renamed in a later edit to deventry or something). cdevsw contains the union of what were in both bdevsw an cdevsw entries. The bdevsw[] table stiff exists and is a second pointer to the cdevsw entry of the device. it's major is in d_bmaj rather than d_maj. some cleanup still to happen (e.g. dsopen now gets two pointers to the same cdevsw struct instead of one to a bdevsw and one to a cdevsw). rawread()/rawwrite() went away as part of this though it's not strictly the same patch, just that it involves all the same lines in the drivers. cdroms no longer have write() entries (they did have rawwrite (?)). tapes no longer have support for bdev operations. Reviewed by: Eivind Eklund and Mike Smith Changes suggested by eivind.
* Fix some more ioctls which I missed becausese they were hidden by optionsdfr1998-06-071-2/+2
| | | | which were not in LINT.
* This commit fixes various 64bit portability problems required fordfr1998-06-071-2/+2
| | | | | | | | | | FreeBSD/alpha. The most significant item is to change the command argument to ioctl functions from int to u_long. This change brings us inline with various other BSD versions. Driver writers may like to use (__FreeBSD_version == 300003) to detect this change. The prototype FreeBSD/alpha machdep will follow in a couple of days time.
* There is no dump routine for fd so give it an explicit NULL entryjulian1998-05-061-2/+3
| | | | in the SLICE table.
* Add dump support to the DEVFS/slice code.julian1998-05-061-3/+3
| | | | | | now we can actually catch our crashes :-) Submitted by: Luoqi Chen <luoqi@chen.ml.org> (the man who's everywhere)
* close() is no longer a SLICE method.julian1998-04-221-4/+10
| | | | | Close is simply an open with no-read and no-write once internal to SLICE (it still exports a close to the rest of the kernel)
* Add changes and code to implement a functional DEVFS.julian1998-04-191-17/+269
| | | | | | | | | | | | | | | | | | | | | This code will be turned on with the TWO options DEVFS and SLICE. (see LINT) Two labels PRE_DEVFS_SLICE and POST_DEVFS_SLICE will deliniate these changes. /dev will be automatically mounted by init (thanks phk) on bootup. See /sys/dev/slice/slice.4 for more info. All code should act the same without these options enabled. Mike Smith, Poul Henning Kamp, Soeren, and a few dozen others This code does not support the following: bad144 handling. Persistance. (My head is still hurting from the last time we discussed this) ATAPI flopies are not handled by the SLICE code yet. When this code is running, all major numbers are arbitrary and COULD be dynamically assigned. (this is not done, for POLA only) Minor numbers for disk slices ARE arbitray and dynamically assigned.
* Seventy-odd "its" / "it's" typos in comments fixed as per kern/6108.des1998-04-171-2/+2
|
* Make all file-system (MFS, FFS, NFS, LFS, DEVFS) related option new-style.eivind1998-01-241-1/+2
| | | | | | | | This introduce an xxxFS_BOOT for each of the rootable filesystems. (Presently not required, but encouraged to allow a smooth move of option *FS to opt_dontuse.h later.) LFS is temporarily disabled, and will be re-enabled tomorrow.
* In all such uses of struct buf: 's/b_un.b_addr/b_data/g'phk1997-12-021-5/+5
|
* Introduce a device flags value of 0x1 to always pretend a 1.44 MBjoerg1997-10-191-2/+15
| | | | | | | | | | | | | floppy drive #0, regardless of what the CMOS says. This is intended as a bandaid for those plagued with Compaq's idea to not announce the floppy drive on their `Aero' notebook. Using the device flags is not very nice (in particular since they aren't per-drive but per-controller), but still looks a lot better to me than the disgusting guesswork hack that was recently posted to -hackers. Doc update will follow shortly.
OpenPOWER on IntegriCloud