luxos/Kernel/drivers/floppy/floppy.h

87 lines
2.9 KiB
C

/*
* floppy.h
*
* Created on: Aug 20, 2011
* Author: Tiberiu
*/
#ifndef FLOPPY_H_
#define FLOPPY_H_
#include <types.h>
enum FloppyRegisters
{
FloppyRegisterStatusA = 0x3F0, // read-only
FloppyRegisterStatusB = 0x3F1, // read-only
FloppyRegisterDigitalOutput = 0x3F2,
FloppyRegisterTapeDrive = 0x3F3,
FloppyRegisterMainStatus = 0x3F4, // read-only
FloppyRegisterDatarateSelect = 0x3F4, // write-only
FloppyRegisterFIFO = 0x3F5,
FloppyRegisterDigitalInput = 0x3F7, // read-only
FloppyRegisterConfigurationControl = 0x3F7 // write-only
};
enum FloppyCommands
{
FloppyCommandReadTrack = 2, // generates IRQ6
FloppyCommandSpecify = 3, // * set drive parameters
FloppyCommandSenseDriveStatus = 4,
FloppyCommandWriteData = 5, // * write to the disk
FloppyCommandReadData = 6, // * read from the disk
FloppyCommandRecalibrate = 7, // * seek to cylinder 0
FloppyCommandSenseInterrupt = 8, // * ack IRQ6, get status of last command
FloppyCommandWriteDeletedData = 9,
FloppyCommandReadID = 10, // generates IRQ6
FloppyCommandReadDeletedData = 12,
FloppyCommandFormatTrack = 13, // *
FloppyCommandSeek = 15, // * seek both heads to cylinder X
FloppyCommandVersion = 16, // * used during initialization, once
FloppyCommandScanEqual = 17,
FloppyCommandPerpendicularMode = 18, // * used during initialization, once, maybe
FloppyCommandConfigure = 19, // * set controller parameters
FloppyCommandLock = 20, // * protect controller params from a reset
FloppyCommandVerify = 22,
FloppyCommandScanLowOrEqual = 25,
FloppyCommandScanHighOrEqual = 29,
FloppyModeMultitrack = 0x80,
FloppyModeMagneticEncoding = 0x40, // always set for read/write/verify/format
FloppyModeSkip = 0x20
};
enum FloppyMSRMasks
{
FloppyMsrRQM = 0x80,
FloppyMsrDIO = 0x40,
FloppyMsrNDMA = 0x20,
FloppyMsrBusy = 0x10
};
typedef struct {
uint32 Size, SectorsPerTrack, Heads, Tracks;
uint8 Gap, DataRate, Spec1, SRT, HLT, HUT;
uint32 Spinup, Spindown, InterruptTimeout;
string Name;
} FloppyType;
extern void FloppyInitialize();
extern void FloppyIrqHandler(_RegsStack32 *r);
extern void FloppyWaitIrq();
extern void FloppyInitDma();
extern void FloppyReset();
extern void FloppyConfigure();
extern void FloppySendCommand (uint8 command);
extern uint8 FloppyReadData ();
extern void FloppySenseInterrupt(uint8 *st0, uint8 *cyl);
extern void FloppySpecify (uint8 fd);
extern void FloppyMotor (uint8 fd_number, uint8 status);
extern void FloppySelectDrive(uint8 number);
extern void FloppyRecalibrate(uint8 fd_number);
extern void FloppyRW(uint8 isWrite, uint8 fd_number, uint8 head, uint8 cylinder, uint8 sector);
extern uint32 FloppyRead(uint8 drive, uint32 lba);
#endif /* FLOPPY_H_ */