Return to BSD News archive
Received: by minnie.vk1xwt.ampr.org with NNTP id AA1283 ; Tue, 23 Feb 93 14:33:49 EST Newsgroups: comp.unix.bsd Path: sserve!manuel.anu.edu.au!munnari.oz.au!uunet!spool.mu.edu!wupost!csus.edu!netcom.com!jmonroy From: jmonroy@netcom.com (Jesus Monroy Jr) Subject: [386BSD] Floppy driver and QIC-40/80 support Message-ID: <1993Feb14.004950.13698@netcom.com> Keywords: 386bsd device driver fdc floppy QIC-40 QIC-80 tape device Organization: Netcom - Online Communication Services (408 241-9760 guest) Date: Sun, 14 Feb 1993 00:49:50 GMT Lines: 134 ------------------------------------------- Here is the body to the head which everyone should have gotten. You can always say you got a little head from me. ------------------------------------------- [386BSD]:Notes on the fd.c - floppy diskette controller In a few days code will be post, along with instruction on how to get a copy and test and test and debug. Most of the new code has been reworked and redocumented. What follows is kind-of-a-map or guide: fd.h used when building(binding or compiling) it tells the kernal how many devices will available (This may be eliminated in the future.) fd1.h basic fdc codes & macros, it also contains USER_TUNEABLE_PARAMETERS fd_bsd.h stuff inportant to 386BSD; logical and syntactical variables fd.c The body of the code. See the first 25 lines for "PROBLEMS and NOTES", also debugging aid switches are included, after that are the prototypes of all the routines in the "fd.c" - the prototype order follows the rest of fd.c code layout. ------------------- While working on this code I have been fortunate enough to deal in surplus computer equipment, and as such, had a ready supply of FD Controllers. Before I start on the FDC problems here are some common problems. (these problems plague all device drivers) BUS - BUS speed varies and some controllers will just not respond in time. Speeds vary from 4Mhz to 12Mhz, and I have seen 16 Mhz. DMA - The DMA is controlled on most system be a seperate clock which make it run faster for high speed RAM. Some systems interleave their RAM, which inturn slows down access, because they wanted to sell the system with cheaper RAM. (This is actually OK, for us.) IRQ - is serviced by the 8259 interrupt controller chip, which unfortunately is not released in time by some drivers, that are doing dumb things. ARQ - not acknowledging an IRQ (with and ARQ) in time, causes some devices to reissue an IRQ, which can now hang the system as the loop tries to play catch up. This happens because some drivers assume that an IRQ means something needs to be done. IE. Now that the first IRQ is answered the second has not data, so a driver may now hang the whole system before timing out, but it may not time out if the IRQ's are masked off by an unknowning driver. The same goes for applications. This may get real messy if the OS (Operating System) tries to maybe swap out a page to the hard disk while maybe servicing a serial port (like for a mouse) and a floppy drive. So much for Motherboard problems, seems like easy things. HUH!?! They are not!! --------------- Now to FDC PROBLEMS IBM originally designed only two(2) floppy drives to the system and then later kludged a hard drive. This may not seem important, but since most FDC makers knew this, they just cut out the control lines on the card to save on the etching (and gold). So some FDC's do not support a 3 & 4 drive, but most AT cards (16-bit) do. To complicate things even more a daisy chain system with terminated resistors was used. So, if you plan4 devices on the FDC and you don't set the addresses correctly or forget the resistors you are lost. Still not really messy enough for most though!! Some drives do not support the drive door open -line. So that means a timeout is needed, even when the controller may have the brains to know better. HAD ENOUGH!! HA! All drives support a drive nor ready - line. Some controllers assume a drive to always be ready. Most post-87 controllers no longer support single sided drives directly. Drive Fault (motor error) is nto supported on either by some makers. - Writing to the Main Status Register(supposedly read-only) of the FDC will reset the drive and maybe put it in a different mode. New laptops use lower power FDC's, which turnoff after a certain amount of default time and require extra time to come on-line. Some FDC data guides ignore logical devices 2 & 3. Some FDC's have a transfer rate of 1000Kbps, the same setting on a different FDC will get you 125Kbps. The FD Disk Change Bit for the AT is in different registers from FDC to FDC implementation. -- Sector numbering starts with 1 (one) not 0 (zero). Track and cylinder get used incorectly in some data guides. --- TO do a DMA transfer you must: There is practically no documentation for the Digital Output Register(aka Drive Control Register) To activate the drive you must: 1) Enable the "drive" bit 2) Enable the "don't reset the controller" bit 3) Enable the "DMA (Intr) Enable" bit 4) Enable the "motor on" bit all this is in one register. Setup the DMA chip (luckily the OS does this). Setup the command chain: 1) USE "MFM" bit 2) USE "MTM (Multi-Track-Mode)" bit 3) Skip "Deleted address mark" (not doing this may abort a transfer) 4) OR (|) togther with the Command the drive-head, the track, the HD(again), the sector, the sector code(size of sector) , sectors per track, gap length( no longer used in newer FDC's), data length(if sector code is 0)