diff options
Diffstat (limited to 'common/cmd_fdc.c')
| -rw-r--r-- | common/cmd_fdc.c | 132 | 
1 files changed, 65 insertions, 67 deletions
| diff --git a/common/cmd_fdc.c b/common/cmd_fdc.c index bf283702d..0293d186a 100644 --- a/common/cmd_fdc.c +++ b/common/cmd_fdc.c @@ -46,24 +46,23 @@  #define FALSE           0  #endif -  /*#if defined(CONFIG_CMD_DATE) */  /*#include <rtc.h> */  /*#endif */  #if defined(CONFIG_CMD_FDC) || defined(CONFIG_CMD_FDOS) -  typedef struct { -	int						flags;		/* connected drives ect */ -	unsigned long blnr;			/* Logical block nr */ -	uchar					drive; 		/* drive no */ -	uchar					cmdlen; 	/* cmd length */ -	uchar					cmd[16]; 	/* cmd desc */ -	uchar					dma;			/* if > 0 dma enabled */ -	uchar					result[11];/* status information */ -	uchar					resultlen; /* lenght of result */ +	int		flags;		/* connected drives ect */ +	unsigned long	blnr;		/* Logical block nr */ +	uchar		drive;		/* drive no */ +	uchar		cmdlen;		/* cmd length */ +	uchar		cmd[16];	/* cmd desc */ +	uchar		dma;		/* if > 0 dma enabled */ +	uchar		result[11];	/* status information */ +	uchar		resultlen;	/* lenght of result */  } FDC_COMMAND_STRUCT; +  /* flags: only the lower 8bit used:   * bit 0 if set drive 0 is present   * bit 1 if set drive 1 is present @@ -75,31 +74,30 @@ typedef struct {   * bit 7 if set disk in drive 4 is inserted   */ -  /* cmd indexes */ -#define COMMAND 		0 -#define DRIVE 			1 +#define COMMAND			0 +#define DRIVE			1  #define CONFIG0			1 -#define SPEC_HUTSRT	1 -#define TRACK 			2 +#define SPEC_HUTSRT		1 +#define TRACK			2  #define CONFIG1			2  #define SPEC_HLT		2 -#define HEAD				3 +#define HEAD			3  #define CONFIG2			3 -#define SECTOR 			4 -#define SECTOR_SIZE	5 -#define LAST_TRACK	6 -#define GAP					7 -#define DTL					8 +#define SECTOR			4 +#define SECTOR_SIZE		5 +#define LAST_TRACK		6 +#define GAP			7 +#define DTL			8  /* result indexes */ -#define STATUS_0						0 -#define STATUS_PCN					1 -#define STATUS_1						1 -#define STATUS_2						2 -#define STATUS_TRACK				3 -#define STATUS_HEAD					4 -#define STATUS_SECT					5 -#define STATUS_SECT_SIZE		6 +#define STATUS_0		0 +#define STATUS_PCN		1 +#define STATUS_1		1 +#define STATUS_2		2 +#define STATUS_TRACK		3 +#define STATUS_HEAD		4 +#define STATUS_SECT		5 +#define STATUS_SECT_SIZE	6  /* Register addresses */ @@ -114,34 +112,34 @@ typedef struct {  #define FDC_DIR		FDC_BASE + 6	/* Digital Input Register */  #define FDC_CCR		FDC_BASE + 7	/* Configuration Control */  /* Commands */ -#define FDC_CMD_SENSE_INT 		0x08 -#define FDC_CMD_CONFIGURE 		0x13 -#define FDC_CMD_SPECIFY	 			0x03 -#define FDC_CMD_RECALIBRATE 	0x07 -#define FDC_CMD_READ				 	0x06 -#define FDC_CMD_READ_TRACK	 	0x02 -#define FDC_CMD_READ_ID			 	0x0A -#define FDC_CMD_DUMP_REG		 	0x0E -#define FDC_CMD_SEEK				 	0x0F +#define FDC_CMD_SENSE_INT	0x08 +#define FDC_CMD_CONFIGURE	0x13 +#define FDC_CMD_SPECIFY		0x03 +#define FDC_CMD_RECALIBRATE	0x07 +#define FDC_CMD_READ		0x06 +#define FDC_CMD_READ_TRACK	0x02 +#define FDC_CMD_READ_ID		0x0A +#define FDC_CMD_DUMP_REG	0x0E +#define FDC_CMD_SEEK		0x0F -#define FDC_CMD_SENSE_INT_LEN 		0x01 -#define FDC_CMD_CONFIGURE_LEN 		0x04 -#define FDC_CMD_SPECIFY_LEN	 			0x03 -#define FDC_CMD_RECALIBRATE_LEN 	0x02 -#define FDC_CMD_READ_LEN				 	0x09 -#define FDC_CMD_READ_TRACK_LEN	 	0x09 -#define FDC_CMD_READ_ID_LEN			 	0x02 -#define FDC_CMD_DUMP_REG_LEN		 	0x01 -#define FDC_CMD_SEEK_LEN				 	0x03 +#define FDC_CMD_SENSE_INT_LEN	0x01 +#define FDC_CMD_CONFIGURE_LEN	0x04 +#define FDC_CMD_SPECIFY_LEN	0x03 +#define FDC_CMD_RECALIBRATE_LEN	0x02 +#define FDC_CMD_READ_LEN	0x09 +#define FDC_CMD_READ_TRACK_LEN	0x09 +#define FDC_CMD_READ_ID_LEN	0x02 +#define FDC_CMD_DUMP_REG_LEN	0x01 +#define FDC_CMD_SEEK_LEN	0x03 -#define FDC_FIFO_THR			0x0C -#define FDC_FIFO_DIS			0x00 +#define FDC_FIFO_THR		0x0C +#define FDC_FIFO_DIS		0x00  #define FDC_IMPLIED_SEEK	0x01 -#define FDC_POLL_DIS			0x00 -#define FDC_PRE_TRK				0x00 -#define FDC_CONFIGURE			FDC_FIFO_THR | (FDC_POLL_DIS<<4) | (FDC_FIFO_DIS<<5) | (FDC_IMPLIED_SEEK << 6) -#define FDC_MFM_MODE			0x01 /* MFM enable */ -#define FDC_SKIP_MODE			0x00 /* skip enable */ +#define FDC_POLL_DIS		0x00 +#define FDC_PRE_TRK		0x00 +#define FDC_CONFIGURE		FDC_FIFO_THR | (FDC_POLL_DIS<<4) | (FDC_FIFO_DIS<<5) | (FDC_IMPLIED_SEEK << 6) +#define FDC_MFM_MODE		0x01 /* MFM enable */ +#define FDC_SKIP_MODE		0x00 /* skip enable */  #define FDC_TIME_OUT 100000 /* time out */  #define	FDC_RW_RETRIES		3 /* read write retries */ @@ -150,18 +148,18 @@ typedef struct {  /* Disk structure */  typedef struct  { -	unsigned int size;			/* nr of sectors total */ -	unsigned int sect;			/* sectors per track */ -	unsigned int head;			/* nr of heads */ -	unsigned int track;			/* nr of tracks */ -	unsigned int stretch;		/* !=0 means double track steps */ -	unsigned char	gap;			/* gap1 size */ -	unsigned char	rate;			/* data rate. |= 0x40 for perpendicular */ -	unsigned char	spec1;		/* stepping rate, head unload time */ -	unsigned char	fmt_gap;	/* gap2 size */ -	unsigned char hlt;			/* head load time */ -	unsigned char sect_code; /* Sector Size code */ -	const char	* name; 		/* used only for predefined formats */ +	unsigned int size;	/* nr of sectors total */ +	unsigned int sect;	/* sectors per track */ +	unsigned int head;	/* nr of heads */ +	unsigned int track;	/* nr of tracks */ +	unsigned int stretch;	/* !=0 means double track steps */ +	unsigned char	gap;	/* gap1 size */ +	unsigned char	rate;	/* data rate. |= 0x40 for perpendicular */ +	unsigned char	spec1;	/* stepping rate, head unload time */ +	unsigned char	fmt_gap;/* gap2 size */ +	unsigned char hlt;	/* head load time */ +	unsigned char sect_code;/* Sector Size code */ +	const char	* name;	/* used only for predefined formats */  } FD_GEO_STRUCT; @@ -342,7 +340,7 @@ int fdc_issue_cmd(FDC_COMMAND_STRUCT *pCMD,FD_GEO_STRUCT *pFG)  		case FDC_CMD_CONFIGURE:  			pCMD->cmd[CONFIG0]=0;  			pCMD->cmd[CONFIG1]=FDC_CONFIGURE; /* FIFO Threshold, Poll, Enable FIFO */ -			pCMD->cmd[CONFIG2]=FDC_PRE_TRK; 	/* Precompensation Track */ +			pCMD->cmd[CONFIG2]=FDC_PRE_TRK;	/* Precompensation Track */  			pCMD->cmdlen=FDC_CMD_CONFIGURE_LEN;  			pCMD->resultlen=0;  /* no result */  			break; |