opnsense-src/sys/sys
Poul-Henning Kamp 1b67be7b75 Rewrite of the floppy driver to make it MPsafe & GEOM friendly:
Centralize the fdctl_wr() function by adding the offset in
	the resource to the softc structure.

	Bugfix: Read the drive-change signal from the correct place:
	same place as the ctl register.

	Remove the cdevsw{} related code and implement a GEOM class.

	Ditch the state-engine and park a thread on each controller
	to service the queue.

	Make the interrupt FAST & MPSAFE since it is just a simple
	wakeup(9) call.

	Rely on a per controller mutex to protect the bioqueues.
	Grab GEOMs topology lock when we have to and Giant when
	ISADMA needs it.  Since all access to the hardware is
	isolated in the per controller thread, the rest of the
	driver is lock & Giant free.

	Create a per-drive queue where requests are parked while
	the motor spins up.  When the motor is running the requests
	are purged to the per controller queue.  This allows
	requests to other drives to be serviced during spin-up.

	Only setup the motor-off timeout when we finish the last
	request on the queue and cancel it when a new request
	arrives.  This fixes the bug in the old code where the motor
	turned off while we were still retrying a request.

	Make the "drive-change" work reliably.  Probe the drive on
	first opens.  Probe with a recal and a seek to cyl=1 to
	reset the drive change line and check again to see if we
	have a media.

	When we see the media disappear we destroy the geom provider,
	create a new one, and flag that autodetection should happen
	next time we see a media (unless a specific format is configured).

	Add sysctl tunables for a lot of drive related parameters.
	If you spend a lot of time waiting for floppies you can
	grab the i82078 pdf from Intels web-page and try tuning
	these.

	Add sysctl debug.fdc.debugflags which will enable various
	kinds of debugging printfs.

	Add central definitions of our well known floppy formats.

	Simplify datastructures for autoselection of format and
	call the code at the right times.

	Bugfix: Remove at least one piece of code which would have
	made 2.88M floppies not work.

	Use implied seeks on enhanced controllers.

	Use multisector transfers on all controllers.  Increase
	ISADMA bounce buffers accordingly.

	Fall back to single sector when retrying.  Reset retry count
	on every successful transaction.

	Sort functions in a more sensible order and generally tidy
	up a fair bit here and there.

	Assorted related fixes and adjustments in userland utilities.

WORKAROUNDS:
	Do allow r/w opens of r/o media but refuse actual write
	operations.  This is necessary until the p4::phk_bufwork
	branch gets integrated (This problem relates to remounting
	not reopening devices, see sys/*/*/${fs}_vfsops.c for details).

	Keep PC98's private copy of the old floppy driver compiling
	and presumably working (see below).

TODO (planned)

	Move probing of drives until after interrupts/timeouts work
	(like for ATA/SCSI drives).

TODO (unplanned)

	This driver should be made to work on PC98 as well.

	Test on YE-DATA PCMCIA floppy drive.

	Fix 2.88M media.

This is a MT5 candidate (depends on the bioq_takefirst() addition).
2004-08-20 15:14:25 +00:00
..
_iovec.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
_label.h Improve consistency of include file guards in src/sys/sys by terminating 2004-05-10 18:38:07 +00:00
_lock.h Include <sys/_lock.h>'s prerequisite <sys/queue.h> before including the 2004-06-19 14:58:35 +00:00
_mutex.h Add some basic support for measuring sleep mutex contention to the 2004-01-25 01:59:27 +00:00
_null.h Make NULL a (void*)0 whereever possible, and fix the warnings(-Werror) 2004-03-05 08:10:19 +00:00
_semaphore.h The sem_timedwait() and ksem_timedwait() functions both 2004-02-03 22:27:03 +00:00
_sigset.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
_task.h Remove (at least temporarily) the check that prevents us from including 2004-07-28 09:12:54 +00:00
_timespec.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
_timeval.h Move struct timeval to its own header so that it can be shared between 2002-12-31 04:08:41 +00:00
_types.h Define __lwpid_t as an int32_t in <sys/_types.h> and define lwpid_t 2004-06-19 17:58:32 +00:00
aac_ioctl.h Do some small cleanups to comments and remove AACQ_COMPLETE definitions since 2004-02-07 17:40:38 +00:00
acct.h Second half of the dev_t cleanup. 2004-06-17 17:16:53 +00:00
acl.h Improve consistency of include file guards in src/sys/sys by terminating 2004-05-10 18:38:07 +00:00
agpio.h Add simple support for AGP 3.0 including enabling 8x mode. The simple 2003-10-23 18:08:56 +00:00
aio.h
alq.h Add an explicit credential argument to alq_open() to allow the caller to 2003-06-22 22:28:56 +00:00
assym.h These are changes to allow to use the Intel C/C++ compiler (lang/icc) 2004-03-12 21:45:33 +00:00
ata.h Whitespace cleanup 2004-05-20 15:09:41 +00:00
bio.h Add bioq_takefirst(). 2004-08-19 19:51:51 +00:00
bitstring.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
blist.h Move the definitions of SWAPBLK_NONE and SWAPBLK_MASK from vm_page.h to 2004-06-04 04:03:26 +00:00
buf.h Eliminate unused second argument to reassignbuf() and simplify it 2004-07-25 21:24:23 +00:00
bus.h Add doxygen doc comments for most of newbus and the BUS interface. 2004-07-18 16:30:31 +00:00
bus_dma.h Document the lockfunc and lockfuncarg arguments to bus_dma_tag_create() in 2003-11-07 23:29:42 +00:00
callout.h 1. Remove callout_stop binary compatibility. 2004-04-20 15:49:31 +00:00
cdefs.h Add a macro to define the size of a subsection of a structure. 2004-08-13 00:53:40 +00:00
cdio.h Remove no longer existant CDIOCREADAUDIO ioctl. 2003-10-20 09:29:40 +00:00
cdrio.h * Add CDRIOC{READ,WRITE}SPEED ioctls to cd(4). Units are in KB/sec. 2002-10-18 22:03:39 +00:00
chio.h Use symbolic constants instead of "4". 2003-05-31 16:54:37 +00:00
clist.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
clock.h
condvar.h Name the pri argument to cv_broadcastpri() to match the existing style of 2004-05-05 21:57:44 +00:00
conf.h Remove the last bits of SPECHASH. 2004-07-11 23:03:37 +00:00
cons.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
consio.h
copyright.h Happy 2004! 2003-12-31 22:27:51 +00:00
ctype.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
dataacq.h
device_port.h
devicestat.h Add an XXX comment with a TODO item for next time we run a revision 2003-05-31 21:10:01 +00:00
digiio.h
dir.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
dirent.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
disk.h I think the divorce successed, so stop #including <geom/geom_disk.h> 2003-04-01 18:55:04 +00:00
disklabel.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
diskmbr.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
diskpc98.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
dkstat.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
domain.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
dvdio.h
elf32.h
elf64.h
elf_common.h Fix typo (in comment): s/IA-46/IA-64/ 2004-05-05 02:38:54 +00:00
elf_generic.h
endian.h Quiet warnings about mis-matched pointer assignment. 2003-10-15 20:05:57 +00:00
errno.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
eui64.h Add support for an /etc/eui64 file modeled on /etc/ethers. The API is 2004-05-26 22:58:06 +00:00
event.h move the declaration of struct kqlist into the non-KERNEL visable section 2004-08-15 15:36:18 +00:00
eventhandler.h Make the process_exit eventhandler run without Giant. Add Giant hooks 2004-03-14 02:06:28 +00:00
eventvar.h Add locking to the kqueue subsystem. This also makes the kqueue subsystem 2004-08-15 06:24:42 +00:00
exec.h Do a pass over all modules in the kernel and make them return EOPNOTSUPP 2004-07-15 08:26:07 +00:00
extattr.h Userspace prototypes for the extattr_list_*() system calls. 2003-06-04 04:04:24 +00:00
fbio.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
fcntl.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
fdcio.h Rewrite of the floppy driver to make it MPsafe & GEOM friendly: 2004-08-20 15:14:25 +00:00
file.h Add the f_vnode pointer to struct xfile, shortly it will no longer be 2004-06-19 11:38:00 +00:00
filedesc.h Add locking to the kqueue subsystem. This also makes the kqueue subsystem 2004-08-15 06:24:42 +00:00
filio.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
fnv_hash.h
gmon.h Add prototypes for the userland gmon support functions, which normally 2004-06-14 18:39:28 +00:00
gpt.h Remove GPT_ENT_TYPE_FREEBSD_UFS2. It was speculatively added before 2004-08-02 18:46:52 +00:00
iconv.h Make msdosfs long filenames matching case insensitive again. 2003-12-08 08:32:20 +00:00
imgact.h Fixed some style bugs (useless forward declarations of structs and 2004-04-24 06:44:33 +00:00
imgact_aout.h Adjust the system endian and a.out headers to be more MI and cross-building 2004-06-22 17:05:39 +00:00
imgact_elf.h Add __elfN(dump_thread). This function is called from __elfN(coredump) 2004-08-11 02:35:06 +00:00
inflate.h
interrupt.h Implement preemption of kernel threads natively in the scheduler rather 2004-07-02 20:21:44 +00:00
ioccom.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
ioctl.h Deorbit COMPAT_SUNOS. 2004-06-11 11:16:26 +00:00
ioctl_compat.h Put the pre FreeBSD-2.x tty compat code under BURN_BRIDGES. 2004-06-21 22:57:16 +00:00
ipc.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
jail.h Give jail(8) the feature to allow raw sockets from within a 2004-04-26 19:46:52 +00:00
joystick.h
jumbo.h Fix 2 vm_offset_t -> vm_paddr_t missed in previous commit. 2003-03-25 01:47:29 +00:00
kbio.h
kdb.h Add kdb_thr_from_pid(), which given a PID returns the first thread 2004-07-21 04:49:48 +00:00
kenv.h
kernel.h Remove nested include of <sys/module.h> 2004-06-18 08:54:49 +00:00
kerneldump.h Add kernel dump support, based on the ia64 version (which was committed 2002-10-20 17:03:15 +00:00
kobj.h * Add multiple inheritance to kobj. Each class can have zero or more base 2003-10-16 09:16:28 +00:00
kse.h 1.Add KSE_INTR_DBSUSPEND command for kse_thr_interrupt to suspend a bound 2004-08-08 22:32:20 +00:00
kthread.h Some kernel threads try to do significant work, and the default KSTACK_PAGES 2002-10-02 07:44:29 +00:00
ktr.h Assign KTR flag constants for UMA events and callouts. 2004-08-06 21:46:51 +00:00
ktrace.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
libkern.h Copy qsort_r(3) from libc to libkern. 2004-07-15 23:58:23 +00:00
limits.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
linedisc.h Fix line discipline switching issues: If opening a new ldisc fails, 2004-06-26 08:44:04 +00:00
link_aout.h
link_elf.h Implement dlinfo() function. 2003-02-13 17:47:44 +00:00
linker.h Give kldunload a -f(orce) argument. 2004-07-13 19:36:59 +00:00
linker_set.h Emply __used attribute to prevent compiler from removing unreferenced 2004-07-28 07:07:16 +00:00
lock.h Rework witness_lock() to make it slightly more useful and flexible. 2004-01-28 20:39:57 +00:00
lockf.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
lockmgr.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
mac.h Do the dreaded s/dev_t/struct cdev */ 2004-06-16 09:47:26 +00:00
mac_policy.h Introduce a temporary mutex, mac_ifnet_mtx, to lock MAC labels on 2004-06-24 03:34:46 +00:00
malloc.h Reimplement contigmalloc(9) with an algorithm which stands a greatly- 2004-07-19 06:21:27 +00:00
mbpool.h Add a facility for devices, specifically network interfaces, that require 2003-07-15 08:59:38 +00:00
mbuf.h Convert ipfw to use PFIL_HOOKS. This is change is transparent to userland 2004-08-17 22:05:54 +00:00
mchain.h Some style fixes. 2003-02-21 16:24:49 +00:00
md4.h
md5.h
mdioctl.h change the name of the md module, to g_md, introduce a define with the 2004-08-09 06:45:20 +00:00
memrange.h Fix module builds for i386 and amd64. 2004-08-04 18:30:31 +00:00
mman.h Remove mlockall() and munlockall() from the list of unimplemented 2004-04-27 13:13:20 +00:00
module.h Give kldunload a -f(orce) argument. 2004-07-13 19:36:59 +00:00
mount.h o Fix a typo in the comment. 2004-08-04 18:57:41 +00:00
mouse.h Add support for the Synaptics Touchpad mouse driver. I reworked the 2004-07-30 00:59:40 +00:00
msg.h Add const qualifier to data argument for msgsnd. 2003-01-26 20:09:34 +00:00
msgbuf.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
mtio.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
mutex.h Cache the value of curthread in the _get_sleep_lock() and _get_spin_lock() 2004-08-04 20:18:45 +00:00
namei.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
nlist_aout.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
param.h We're not yet ready for BURN_BRIDGES to break the build, as 2004-08-18 03:13:16 +00:00
pciio.h
pcpu.h Change the type of the various CPU masks to cpumask_t. Note that as 2004-03-27 18:21:24 +00:00
pioctl.h
pipe.h An a #error discouraging people from using pipe.h from places outside 2004-07-21 03:11:41 +00:00
poll.h
posix4.h Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
power.h
priority.h
proc.h Now that the return value semantics of cv's for multithreaded processes 2004-08-19 11:31:42 +00:00
procfs.h type prgregset_t really should be an array. this is odd, however, other 2004-07-15 03:52:17 +00:00
protosw.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
ptio.h
ptrace.h Add pl_flags to ptrace_lwpinfo, two flags PL_FLAG_SA and PL_FLAG_BOUND 2004-08-08 22:26:11 +00:00
queue.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
random.h add RANDOM_PURE for use by crypto drivers that harvest data from h/w RNG's 2002-10-04 20:34:08 +00:00
reboot.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
regression.h Improve consistency of include file guards in src/sys/sys by terminating 2004-05-10 18:38:07 +00:00
resource.h Make this header a little bit more XSI-compliant: 2004-06-13 22:07:58 +00:00
resourcevar.h Annotate locking strategy for 'struct uidinfo'. 2004-08-04 18:14:19 +00:00
rman.h Soften __RMAN_RESOURCE_VISIBLE a little: expose rman and the 2004-07-01 16:20:58 +00:00
rtprio.h
runq.h
sbuf.h Have sbuf_bcat() and sbuf_bcpy() take a const void * instead of a 2004-07-09 11:35:30 +00:00
sched.h When calling scheduler entrypoints for creating new threads and processes, 2004-07-18 23:36:13 +00:00
select.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
selinfo.h Add locking to the kqueue subsystem. This also makes the kqueue subsystem 2004-08-15 06:24:42 +00:00
sem.h s/u_short/unsigned short/ to make this compile if _POSIX_C_SOURCE=200112 2003-06-02 17:23:37 +00:00
sema.h
semaphore.h The sem_timedwait() and ksem_timedwait() functions both 2004-02-03 22:27:03 +00:00
serial.h Make the relationship between modem control bits and their delta cousins 2004-06-25 10:56:43 +00:00
sf_buf.h In some cases, sf_buf_alloc() should sleep with pri PCATCH; in others, it 2004-04-03 09:16:27 +00:00
shm.h Bring shm functions closer the the opengroup standards. 2003-01-25 21:33:05 +00:00
sigio.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
signal.h Make this look less dubious :-) 2004-06-11 11:43:46 +00:00
signalvar.h Add code to support debugging threaded process. 2004-07-13 07:20:10 +00:00
sleepqueue.h Now that the return value semantics of cv's for multithreaded processes 2004-08-19 11:31:42 +00:00
smp.h Change the type of the various CPU masks to cpumask_t. Note that as 2004-03-27 18:21:24 +00:00
snoop.h Second half of the dev_t cleanup. 2004-06-17 17:16:53 +00:00
socket.h RFC 2292 requires to check msg_controllen, in case that the kernel returns 2004-08-11 10:18:49 +00:00
socketvar.h Rename Alfred's kern_setsockopt to so_setsockopt, as this seems a 2004-07-12 21:42:33 +00:00
sockio.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
soundcard.h New defines that paves the way for new midi features and ports. 2003-11-22 03:27:09 +00:00
stat.h Second half of the dev_t cleanup. 2004-06-17 17:16:53 +00:00
statvfs.h
stddef.h Change the definition of NULL on ia64 (for LP64 compilations) from 2003-12-07 21:10:06 +00:00
stdint.h
sun_disklabel.h Add SVR4-compatible VTOC-style elements to the Sun label. The 2004-06-01 20:18:25 +00:00
sx.h Add sx_unlock() macro as a frontend to both sx_sunlock() and sx_xunlock(), 2004-07-11 16:07:07 +00:00
syscall.h Give kldunload a -f(orce) argument. 2004-07-13 19:36:59 +00:00
syscall.mk Give kldunload a -f(orce) argument. 2004-07-13 19:36:59 +00:00
syscallsubr.h Add a kern_setsockopt and kern_getsockopt which can read the option 2004-07-17 21:06:36 +00:00
sysctl.h Introduce SYSCTL_CHILDREN_SET macro which can be used in place of 2004-07-28 07:08:39 +00:00
sysent.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
syslimits.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
syslog.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
sysproto.h Give kldunload a -f(orce) argument. 2004-07-13 19:36:59 +00:00
systm.h Finish the PRISON_ROOT -> SUSER_ALLOWJAIL renaming by removing 2004-08-05 07:15:35 +00:00
taskqueue.h rearange some code that handles the thread taskqueue so that it is more 2004-08-08 02:37:22 +00:00
termios.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
thr.h Change the thread ID (thr_id_t) used for 1:1 threading from being a 2004-07-02 00:40:07 +00:00
tiio.h
time.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
timeb.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
timepps.h Long overdue comment claification: RFC 2783 was approved long time ago. 2003-11-23 18:52:23 +00:00
timers.h
times.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
timespec.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
timetc.h Give timecounters a numeric quality field. 2003-08-16 08:23:53 +00:00
timex.h
tree.h Synch with NetBSD: avoid "unused parameter" warning. 2004-03-29 11:18:25 +00:00
tty.h Preparation commit for the tty cleanups that will follow in the near 2004-07-15 20:47:41 +00:00
ttychars.h Put the pre FreeBSD-2.x tty compat code under BURN_BRIDGES. 2004-06-21 22:57:16 +00:00
ttycom.h Retire the TIOC_REMOTE ioctl. 2004-06-25 21:54:49 +00:00
ttydefaults.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
ttydev.h Put the pre FreeBSD-2.x tty compat code under BURN_BRIDGES. 2004-06-21 22:57:16 +00:00
turnstile.h Sort function prototypes. 2004-04-06 19:08:40 +00:00
types.h Define __lwpid_t as an int32_t in <sys/_types.h> and define lwpid_t 2004-06-19 17:58:32 +00:00
ucontext.h Change the clear_ret argument of get_mcontext() to be a flags argument. 2003-11-09 20:31:04 +00:00
ucred.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
uio.h Clean up and wash struct iovec and struct uio handling. 2004-07-10 15:42:16 +00:00
umtx.h Change the thread ID (thr_id_t) used for 1:1 threading from being a 2004-07-02 00:40:07 +00:00
un.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
unistd.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
unpcb.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
user.h Reserve a pointer "ki_udata" in kinfo_proc as a convenience for userland. 2004-07-12 04:53:33 +00:00
utsname.h Remove advertising clause from University of California Regent's license, 2004-04-07 04:19:52 +00:00
uuid.h Introduce {be,le}_uuid_{enc,dec}() functions for explicitly encoding 2003-05-31 16:47:07 +00:00
vmmeter.h Remove remnants of PGINPROF. 2004-06-08 10:37:30 +00:00
vnode.h Add locking to the kqueue subsystem. This also makes the kqueue subsystem 2004-08-15 06:24:42 +00:00
wait.h Fixed missing forward declaration of struct rusage in the _KERNEL case. 2004-04-09 13:14:32 +00:00
watchdog.h Add a generic watchdog facility which through a single device entry 2004-02-28 20:06:59 +00:00
xrpuio.h