127 lines
3.6 KiB
C
127 lines
3.6 KiB
C
/*****************************************************************************
|
||
*
|
||
* COPYRIGHT 1993 - COLORADO MEMORY SYSTEMS, INC.
|
||
* ALL RIGHTS RESERVED.
|
||
*
|
||
******************************************************************************
|
||
*
|
||
* FILE: \SE\DRIVER\Q117CD\SRC\0X11052.C
|
||
*
|
||
* FUNCTION: cqd_BuildFormatHdr
|
||
*
|
||
* PURPOSE: Build the sector headers for an entire segment.
|
||
*
|
||
* HISTORY:
|
||
* $Log: J:\se.vcs\driver\q117cd\src\0x11052.c $
|
||
*
|
||
* Rev 1.3 22 Feb 1994 14:50:44 BOBLEHMA
|
||
* Added a dTRUE parameter to kdi_TrakkerXfer to signify a transfer
|
||
* during a format command.
|
||
*
|
||
* Rev 1.2 21 Jan 1994 18:23:22 KEVINKES
|
||
* Fixed compiler warnings.
|
||
*
|
||
* Rev 1.1 07 Jan 1994 10:55:56 CHETDOUG
|
||
* Fixed up Trakker format.
|
||
*
|
||
* Rev 1.0 13 Dec 1993 15:47:06 KEVINKES
|
||
* Initial Revision.
|
||
*
|
||
*****************************************************************************/
|
||
#define FCT_ID 0x11052
|
||
#include "include\public\adi_api.h"
|
||
#include "include\public\frb_api.h"
|
||
#include "include\private\kdi_pub.h"
|
||
#include "include\private\cqd_pub.h"
|
||
#include "q117cd\include\cqd_defs.h"
|
||
#include "q117cd\include\cqd_strc.h"
|
||
#include "q117cd\include\cqd_hdr.h"
|
||
/*endinclude*/
|
||
|
||
dStatus cqd_BuildFormatHdr
|
||
(
|
||
/* INPUT PARAMETERS: */
|
||
|
||
CqdContextPtr cqd_context,
|
||
dUWord header /* header data block to update */
|
||
|
||
/* UPDATE PARAMETERS: */
|
||
|
||
/* OUTPUT PARAMETERS: */
|
||
|
||
)
|
||
/* COMMENTS: *****************************************************************
|
||
*
|
||
* DEFINITIONS: *************************************************************/
|
||
{
|
||
#define SEND_TRAKKER_DATA 2
|
||
/* DATA: ********************************************************************/
|
||
|
||
FormatHeader hdr_data; /* sector id data */
|
||
dUDWord *hdr_ptr; /* pointer to sector id data for format */
|
||
dUWord i;
|
||
dUWord datasize;
|
||
dStatus status=DONT_PANIC;
|
||
|
||
/* CODE: ********************************************************************/
|
||
|
||
/* If the current sector is larger than the
|
||
* number of sectors per floppy track.
|
||
*/
|
||
|
||
if (cqd_context->fmt_op.sector >
|
||
cqd_context->floppy_tape_parms.fsect_ftrack) {
|
||
|
||
/* zero out the current sector and
|
||
* increment the current cylinder
|
||
*/
|
||
|
||
cqd_context->fmt_op.sector = 1;
|
||
cqd_context->fmt_op.cylinder++;
|
||
|
||
/* if the current cylinder is greater than
|
||
* the number of floppy tracks per floppy side
|
||
*/
|
||
if (cqd_context->fmt_op.cylinder ==
|
||
(dUByte)cqd_context->floppy_tape_parms.ftrack_fside) {
|
||
|
||
/* zero out the current cylinder and
|
||
* increment the current head
|
||
*/
|
||
|
||
cqd_context->fmt_op.cylinder = 0;
|
||
cqd_context->fmt_op.head++;
|
||
|
||
}
|
||
}
|
||
|
||
/* setup the static data per segment */
|
||
hdr_ptr = cqd_context->fmt_op.hdr_ptr[header];
|
||
hdr_data.hdr_struct.C = cqd_context->fmt_op.cylinder;
|
||
hdr_data.hdr_struct.H = cqd_context->fmt_op.head;
|
||
hdr_data.hdr_struct.N = FMT_BPS;
|
||
|
||
/* complete the headers for the segment by filling
|
||
* in the sector unique data.
|
||
*/
|
||
for (i = 0; i < cqd_context->floppy_tape_parms.fsect_seg; i++) {
|
||
|
||
/* increment the current sector */
|
||
hdr_data.hdr_struct.R = cqd_context->fmt_op.sector++;
|
||
*hdr_ptr = hdr_data.hdr_all;
|
||
++hdr_ptr;
|
||
|
||
}
|
||
|
||
if (kdi_Trakker(cqd_context->kdi_context)) {
|
||
datasize = (dUWord)(cqd_context->floppy_tape_parms.fsect_seg * sizeof(dUDWord));
|
||
/* This is a Trakker...bummer...Need to start a Trakkerxfer to send the
|
||
* format buffer that was just built to the trakker buffer. */
|
||
status = kdi_TrakkerXfer((dVoidPtr)cqd_context->fmt_op.hdr_ptr[header],
|
||
(dUDWord)(0l + header * datasize),datasize,SEND_TRAKKER_DATA,
|
||
dTRUE); /* TRUE means we are doing a format */
|
||
}
|
||
|
||
return status;
|
||
}
|