File:  [Power 6/32 Unix Tahoe 4.2BSD] / cci / sys / stand / vdfmt / smd_e.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Sun Jul 28 12:29:50 2019 UTC (6 years, 11 months ago) by root
Branches: bsd, MAIN
CVS tags: v121, HEAD
Power 6/32 Unix version 1.21

#include	"vdfmt.h"


/*
**	The sector format of the SMD controller looks like this:
**  32 bytes sector gap			(header error)
**   1 byte sync (0x19)			(header error)
**   2 bytes cylinder address		(header error)
**   1 byte track address		(header error)
**   1 byte sector address		(header error)
**   2 bytes alt cylinder address	(header error)
**   1 byte alt track address		(header error)
**   1 byte alt sector address		(header error)
**   4 bytes header crc			(header error)
**  34 bytes header gap			(data error)
** 512 bytes data			(data error)
**   4 byte ecc				(data error)
**  ?? trailing pad			(data error)
*/

fmt_err smd_e_decode_position(bad_entry)
bs_entry bad_entry;
{
	fmt_err	error;
	int	sector_length = CURRENT->nbyte / CURRENT->nsec;
	int	offset = (bad_entry.bs_offset-2) % sector_length;
	int	bytes = (bad_entry.bs_length / 8) + 4;

	error.err_adr.cylinder = bad_entry.bs_cyl;
	error.err_adr.track = bad_entry.bs_trk;
	error.err_adr.sector = (bad_entry.bs_offset-2) / sector_length;
	if(error.err_adr.sector >= CURRENT->nsec) {
		error.err_adr.sector = CURRENT->nsec - 1;
		error.err_stat = DATA_ERROR;
	}
	else if((offset < 45) || ((offset+bytes) > sector_length))
		error.err_stat = HEADER_ERROR;
	else 
		error.err_stat = DATA_ERROR;
	return	error;
}


/*
**
*/

bs_entry smd_e_code_position(error)
fmt_err	error;
{
	int		sector_length = CURRENT->nbyte / CURRENT->nsec;
	bs_entry	temp;

	temp.bs_length = 1;
	temp.bs_cyl = error.err_adr.cylinder;
	temp.bs_trk = error.err_adr.track;
	temp.bs_offset = error.err_adr.sector * sector_length;
	if(error.err_stat & HEADER_ERROR) {
		temp.bs_offset += 1;
	}
	else {
		temp.bs_offset += 60;
	}
	temp.bs_alt.cylinder = 0;
	temp.bs_alt.track = 0;
	temp.bs_alt.sector = 0;
	temp.bs_how = scanning;
	return	temp;
}


/*
**
*/

int smd_e_cyl_skew()
{
	return 0;
}


/*
**
*/

int smd_e_trk_skew()
{
	return 0;
}


unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.