xref: /csrg-svn/sys/tahoe/stand/vdformat/smd_e.c (revision 29536)
1*29536Ssam #ifndef lint
2*29536Ssam static char sccsid[] = "@(#)smd_e.c	1.1 (Berkeley/CCI) 07/05/86";
3*29536Ssam #endif
4*29536Ssam 
5*29536Ssam #include	"vdfmt.h"
6*29536Ssam 
7*29536Ssam 
8*29536Ssam /*
9*29536Ssam **	The sector format of the SMD controller looks like this:
10*29536Ssam **  32 bytes sector gap			(header error)
11*29536Ssam **   1 byte sync (0x19)			(header error)
12*29536Ssam **   2 bytes cylinder address		(header error)
13*29536Ssam **   1 byte track address		(header error)
14*29536Ssam **   1 byte sector address		(header error)
15*29536Ssam **   2 bytes alt cylinder address	(header error)
16*29536Ssam **   1 byte alt track address		(header error)
17*29536Ssam **   1 byte alt sector address		(header error)
18*29536Ssam **   4 bytes header crc			(header error)
19*29536Ssam **  34 bytes header gap			(data error)
20*29536Ssam ** 512 bytes data			(data error)
21*29536Ssam **   4 byte ecc				(data error)
22*29536Ssam **  ?? trailing pad			(data error)
23*29536Ssam */
24*29536Ssam 
25*29536Ssam fmt_err smd_e_decode_position(bad_entry)
26*29536Ssam bs_entry bad_entry;
27*29536Ssam {
28*29536Ssam 	fmt_err	error;
29*29536Ssam 	int	sector_length = CURRENT->vc_traksize / CURRENT->vc_nsec;
30*29536Ssam 	int	offset = (bad_entry.bs_offset-2) % sector_length;
31*29536Ssam 	int	bytes = (bad_entry.bs_length / 8) + 4;
32*29536Ssam 
33*29536Ssam 	error.err_adr.cylinder = bad_entry.bs_cyl;
34*29536Ssam 	error.err_adr.track = bad_entry.bs_trk;
35*29536Ssam 	error.err_adr.sector = (bad_entry.bs_offset-2) / sector_length;
36*29536Ssam 	if(error.err_adr.sector >= CURRENT->vc_nsec) {
37*29536Ssam 		error.err_adr.sector = CURRENT->vc_nsec - 1;
38*29536Ssam 		error.err_stat = DATA_ERROR;
39*29536Ssam 	}
40*29536Ssam 	else if((offset < 45) || ((offset+bytes) > sector_length))
41*29536Ssam 		error.err_stat = HEADER_ERROR;
42*29536Ssam 	else
43*29536Ssam 		error.err_stat = DATA_ERROR;
44*29536Ssam 	return	error;
45*29536Ssam }
46*29536Ssam 
47*29536Ssam 
48*29536Ssam /*
49*29536Ssam **
50*29536Ssam */
51*29536Ssam 
52*29536Ssam bs_entry smd_e_code_position(error)
53*29536Ssam fmt_err	error;
54*29536Ssam {
55*29536Ssam 	int		sector_length = CURRENT->vc_traksize / CURRENT->vc_nsec;
56*29536Ssam 	bs_entry	temp;
57*29536Ssam 
58*29536Ssam 	temp.bs_length = 1;
59*29536Ssam 	temp.bs_cyl = error.err_adr.cylinder;
60*29536Ssam 	temp.bs_trk = error.err_adr.track;
61*29536Ssam 	temp.bs_offset = error.err_adr.sector * sector_length;
62*29536Ssam 	if(error.err_stat & HEADER_ERROR) {
63*29536Ssam 		temp.bs_offset += 1;
64*29536Ssam 	}
65*29536Ssam 	else {
66*29536Ssam 		temp.bs_offset += 60;
67*29536Ssam 	}
68*29536Ssam 	temp.bs_alt.cylinder = 0;
69*29536Ssam 	temp.bs_alt.track = 0;
70*29536Ssam 	temp.bs_alt.sector = 0;
71*29536Ssam 	temp.bs_how = scanning;
72*29536Ssam 	return	temp;
73*29536Ssam }
74*29536Ssam 
75*29536Ssam 
76*29536Ssam /*
77*29536Ssam **
78*29536Ssam */
79*29536Ssam 
80*29536Ssam int smd_e_cyl_skew()
81*29536Ssam {
82*29536Ssam 	return 0;
83*29536Ssam }
84*29536Ssam 
85*29536Ssam 
86*29536Ssam /*
87*29536Ssam **
88*29536Ssam */
89*29536Ssam 
90*29536Ssam int smd_e_trk_skew()
91*29536Ssam {
92*29536Ssam 	return 0;
93*29536Ssam }
94*29536Ssam 
95