Return to BSD News archive
Newsgroups: comp.os.386bsd.development
Path: sserve!newshost.anu.edu.au!munnari.oz.au!constellation!osuunx.ucc.okstate.edu!moe.ksu.ksu.edu!zaphod.mps.ohio-state.edu!cs.utexas.edu!uunet!decwrl!netcomsv!netcom.com!jmonroy
From: jmonroy@netcom.com (Jesus Monroy Jr)
Subject: FDC flow chart #2
Message-ID: <jmonroyC62GqE.67I@netcom.com>
Keywords: FDC flow chart logic
Organization: NETCOM On-line Communication Services (408 241-9760 guest)
Date: Mon, 26 Apr 1993 01:13:26 GMT
Lines: 266
mail julian@jules.dialix.oz.au
flow chart #1
This posting is for the FDC & QIC-40/80 group.
What follows is the logic for the FDC through the function
calls and Macros. "Decision" logic is not included except
where a Macro or Function was called.
Logic for What?
---------------
This is the logic for a FDC request for data
transfer, wheter it is a read or write to the floppy drive.
___________________________________________________________________________
Jesus Monroy Jr jmonroy@netcom.com
/386BSD/device-drivers /fd /qic /clock /documentation
___________________________________________________________________________
+-------------
|* request - funtions in order run
~~~~~~| logical and physical
|
+-------------
+-----------------+ +---------------
| | fdstrategy()| | |* all request start here
| | | | | (should start in open)
| | | |~~~~~~~~~~~~~~~|
| | | | |
| | | | |
+-----------------+ +---------------
!
!
V
+-----------------+ +---------------
| | FD-UNIT() | | |* extract unit number from
| | | | | request packet
| | C-MACRO | |~~~~~~~~~~~~~~~|
| | | | |
| | | | |
+-----------------+ +---------------
! !
! !
! !
! !
! !
! ! +---------------
! V |* fatal errors
! +-------------+ | abort process
! ( fdterminate() )~~~~~~~~~~| +---------------
! ( ) | |* error on
! +-------------+ | | invalid parameters
! +------------~~~~|* bad transfer
! | request
! |
V +---------------
+----------------+ +---------------
| | splbio() | | |* Lock out
| | | | | other (competing)
| | | |~~~~~~~~~~~| processes
| | | | |
| | | | |
+----------------+ +---------------
!
!
V
/\
/ \
/ \
/ disk \
/--------\
\ /
\ sort /
\ /
\ /
\/
!
+----------------+ +---------------
| | untimeout()| | |* I don't know
| | | | | why this is
| | | |~~~~~~~| here
| | | | |
| | | | |
+----------------+ +---------------
!
!
!
!
V
+----------------+ +---------------
| | splx() | | |* return priority
| | | | | to others
| | | |~~~~~~~~~~~|
| | | | |
| | | | |
+----------------+ +---------------
!
!
+~~~~~~~~~~+
! !
! ! +---------------
! V |* drive is busy
! +-------------+ | no need to fdstart.
! ( )~~~~~~~| request is on que.
! ( RETURN ) |
! +-------------+ |
! +---------------
!
!
V
+-----------------+ +---------------
| | fdstart() | | |* start any processes
| | | | | needed
| | | |~~~~~~~~~~~|
| | | | |
| | | | |
+-----------------+ +---------------
!
!
V
+--------------------+ +---------------
| | GET-PARM-PTRS()| | |* get the parameter
| | | | | pointers
| | C-MACRO | |~~~~~~~~|
| | | | |
| | | | |
+--------------------+ +---------------
!
!
V
+-----------------+ +---------------
| | splbio() | | |* Lock Out other
| | | | | processes
| | | |~~~~~~~~~~~~~~~~~~~~~|
| | | | |
| | | | |
+-----------------+ +---------------
!
+~~~~~~~~~~~~~~~~~~~+~~~~+
! ! !
V ! !
+-----------------+ ! ! +---------------
| | fdturnon() | | | ! |* turn on the FD motor
| | | | ! ! |
| | | |~~~~~~~~~!~~~~!~~~~|
| | | | ! ! |
| | | | ! ! |
+-----------------+ ! ! +---------------
! ! !
! ! !
! V !
! +-------------------------+ ! +---------------
! | | fd_prep_reset_drv() | | ! |* calculate the
! | | | | ! ! fd track to
! | | | |~~~!~~~~~~| seek
! | | | | ! |
! | | | | ! |
! +-------------------------+ ! +---------------
! ! !
! ! !
! ! V
! ! +----------------------------+ +---------------
! ! | | fd_prep() | | |* calculate the
! ! | | | | | neede parameters
! ! | | | |~~~~~~~| for data transfer
! ! | | | | |
! ! | | | | |
! ! +----------------------------+ +---------------
! ! !
! ! !
! ! !
V V V
+-----------------+ +---------------
| | splx() | | |* return priority
| | | | | to others
| | | |~~~~~~~~~~~~~~~~~~~~~|
| | | | |
| | | | |
+-----------------+ +---------------
!
+~~~~~~~~~~~+~~+~~+~~+~~~~~+
! ! ! ! ! !
V ! ! ! ! !
+-----------------+ ! ! ! ! ! +---------------
| | fdterminate | | ! ! ! ! ! |* Write-check
| | | | ! ! ! ! ! | if failed fdterminate()
| | | |~!~~!~~!~~!~~~~~!~~|
| | | | ! ! ! ! ! |
| | | | ! ! ! ! ! |
+-----------------+ ! ! ! ! ! +---------------
! ! ! ! ! !
! +-----------------+ ! ! ! ! +---------------
! | | timeout() | | ! ! ! ! |* allow the moter
! | | | | ! ! ! ! | time to spin up
! | | | |~!~~!~~!~~~~~!~~|
! | | | | ! ! ! ! |
! | | | | ! ! ! ! |
! +-----------------+ ! ! ! ! +---------------
! ! ! ! ! !
! ! ! ! ! !
! ! V ! ! !
! ! +-----------------+ ! ! ! +---------------
! ! | | fd-reset() | | ! ! ! |* issue a reset
! ! | | | | ! ! ! | command to
! ! | | | |~!~~!~~~~~!~~~~| the FDC
! ! | | | | ! ! ! |
! ! | | | | ! ! ! |
! ! +-----------------+ ! ! ! +---------------
! ! ! ! ! !
! ! ! ! ! !
! ! ! V ! !
! ! ! +-----------------+ ! ! +---------------
! ! ! | | fd-seek() | | ! ! |* issue a seek
! ! ! | | | | | ! | command to
! ! ! | | | |~!~~~~~!~~~~~~~| the FDC
! ! ! | | | | ! ! |
! ! ! | | | | ! ! |
! ! ! +-----------------+ ! ! +---------------
! ! ! ! ! !
! ! ! ! ! !
! ! ! ! ! !
! ! ! ! V !
! ! ! ! +--------------------+ ! +---------------
! ! ! ! | | fd-read-write()| | ! |* issue a read/write
! ! ! ! | | | | ! | command to
! ! ! ! | | | |~!~~~~~~~| the FDC
! ! ! ! | | | | ! |
! ! ! ! | | | | ! |
! ! ! ! +--------------------+ ! +---------------
! ! ! ! ! !
! ! ! ! ! !
! ! ! ! ! V
! ! ! ! ! +--------------+
! ! ! ! ! | Error | +---------------
! ! ! ! ! | | |* Something wierd
! ! ! ! ! | stdout(err) | | has happened
! ! ! ! ! | |~~~~~|
! ! ! ! ! | - -- | |
! ! ! ! ! - - --- |
! ! ! ! ! - - +---------------
! ! ! ! ! - -
! ! ! ! ! - -
! ! ! ! ! !
+~~+~~+~~+~~+~~~~~~~~~~~+
!
! +---------------
V |* This is the normal
+-------------+ | completion point
( )~~~~~~~| for most transactions.
( RETURN ) | NOTE: if error on startup
+-------------+ | there is no-recover, yet
+---------------
___________________________________________________________________________
Jesus Monroy Jr jmonroy@netcom.com
/386BSD/device-drivers /fd /qic /clock /documentation
___________________________________________________________________________