windows-nt/Source/XPSP1/NT/drivers/storage/fdc/inc/flpyenbl.h
2020-09-26 16:20:57 +08:00

178 lines
4.9 KiB
C

/*++
Copyright (c) 1996 Hewlett-Packard Corporation
Module Name:
cmsfcxx.h
Abstract:
This file includes data declarations for Floppy Controller Enabling
Author:
Kurt Godwin (v-kurtg) 26-Mar-1996.
Environment:
Kernel mode only.
Notes:
Revision History:
--*/
#define FDC_VALUE_API_SUPPORTED L"APISupported"
#define FDC_VALUE_CLOCK_48MHZ L"Clock48MHz"
//
// Floppy controler data rates (to be OR'd together)
//
#define FDC_SPEED_250KB 0x0001
#define FDC_SPEED_300KB 0x0002
#define FDC_SPEED_500KB 0x0004
#define FDC_SPEED_1MB 0x0008
#define FDC_SPEED_2MB 0x0010
//
// Dma Width supported
//
#define FDC_8_BIT_DMA 0x0001
#define FDC_16_BIT_DMA 0x0002
//
// Dma direction
//
#define FDC_READ_FROM_MEMORY 0x0000
#define FDC_WRITE_TO_MEMORY 0x0001
//
// Clock Rate to the FDC (FDC_82078 only)
//
#define FDC_CLOCK_NORMAL 0x0000 // Use this for non 82078 parts
#define FDC_CLOCK_48MHZ 0x0001 // 82078 with a 48MHz clock
#define FDC_CLOCK_24MHZ 0x0002 // 82078 with a 24MHz clock
//
// Floppy controler types
//
#define FDC_TYPE_NORMAL 2 // Any NEC 768 compatible, 250Kb/sec 500Kb/sec
#define FDC_TYPE_ENHANCED 3 // Any NEC 768 compatible that supports the version command, 250Kb/sec 500Kb/sec
#define FDC_TYPE_82077 4 // National 8477, 250Kb/sec 500Kb/sec 1Mb/sec
#define FDC_TYPE_82077AA 5 // Intel 82077, 250Kb/sec 500Kb/sec 1Mb/sec
#define FDC_TYPE_82078_44 6 // Intel 82077AA, 250Kb/sec 500Kb/sec 1Mb/sec
#define FDC_TYPE_82078_64 7 // Intel 82078 44 Pin Version, 250Kb/sec 500Kb/sec 1Mb/sec(2Mb/sec capable)
#define FDC_TYPE_NATIONAL 8 // Intel 82078 64 Pin Version, 250Kb/sec 500Kb/sec 1Mb/sec(2Mb/sec capable)
typedef struct _FDC_MODE_SELECT {
ULONG structSize; // Size of this structure (inclusive)
ULONG Speed; // Should be only ONE of the data rates (i.e. FDC_SPEED_XXX)
// ONLY select speeds that were available from FDC_INFORMATION
ULONG DmaWidth; // Should be only ONE of the dma widths (i.e. FDC_16_BIT_DMA)
// ONLY select DMA Widths that were available from FDC_INFORMATION
ULONG DmaDirection; // Should be FDC_READ_FROM_MEMORY or FDC_WRITE_TO_MEMORY
ULONG ClockRate; // Should be FDC_48MHZ, FDC_24MHZ or zero
} FDC_MODE_SELECT, *PFDC_MODE_SELECT;
typedef struct _FDC_INFORMATION {
ULONG structSize; // Size of this structure (inclusive)
ULONG SpeedsAvailable; // Any combination of FDC_SPEED_xxxx or'd together
ULONG DmaWidthsSupported; // Any combination of FDC_xx_BIT_DMA
ULONG ClockRatesSupported; // Should be FDC_48MHZ, FDC_24MHZ or zero
// If the part is capable of both speeds
// return both OR'd together. It is then
// the caller's responsiblity to set the
// proper data rate with FDC_MODE_SELECT
ULONG FloppyControllerType; // Should be any ONE of type FDC_TYPE_XXXX
} FDC_INFORMATION, *PFDC_INFORMATION;
#define IOCTL_FLPENBL_BASE FILE_DEVICE_TAPE
//
// IOCTL Codes set to the enabler driver's IRP_MJ_INTERNAL_DEVICE_CONTROL
//
//
//
//
// ACQUIRE_FDC:
//
// input: Type3InputBuffer = PLARGE_INTEGER timeout;
// output:
//
// status:
// Completion status will be STATUS_SUCCESS or STATUS_IN_USE
//
#define IOCTL_AQUIRE_FDC CTL_CODE(IOCTL_FLPENBL_BASE, 0x0001, METHOD_NEITHER, FILE_ANY_ACCESS)
#define IOCTL_ACQUIRE_FDC CTL_CODE(IOCTL_FLPENBL_BASE, 0x0001, METHOD_NEITHER, FILE_ANY_ACCESS)
//
// RELEASE_FDC
//
// input:
// output:
//
// status:
// Completion status will be STATUS_SUCCESS or STATUS_INVALID_PARAMETER
//
#define IOCTL_RELEASE_FDC CTL_CODE(IOCTL_FLPENBL_BASE, 0x0002, METHOD_NEITHER, FILE_ANY_ACCESS)
//
// GET_FDC_INFO
//
//
// input:
// For this function,
// (irp stack)->Parameters.DeviceIoControl.Type3InputBuffer
// will point to a FDC_INFORMATION buffer (output only)
//
// output:
//
// status:
// ioCompletion status will allways be STATUS_SUCCESS
//
#define IOCTL_GET_FDC_INFO CTL_CODE(IOCTL_FLPENBL_BASE, 0x0003, METHOD_NEITHER, FILE_ANY_ACCESS)
//
// SET_FDC_MODE
//
// input:
// For this function,
// (irp stack)->Parameters.DeviceIoControl.Type3InputBuffer
// will point to a FDC_MODE_SELECT buffer (input only)
//
//
// output:
//
// status:
//
// ioCompletion status will be STATUS_SUCCESS or STATUS_INVALID_PARAMETER
//
#define IOCTL_SET_FDC_MODE CTL_CODE(IOCTL_FLPENBL_BASE, 0x0004, METHOD_NEITHER, FILE_ANY_ACCESS)
// ADD_CONTENDER
//
// input:
// controller # (as in FloppyController#) of the controller that
// wants to contend for resources used by this controller
//
// output:
// NOTHING
//
#define IOCTL_ADD_CONTENDER CTL_CODE(IOCTL_FLPENBL_BASE, 0x0005, METHOD_NEITHER, FILE_ANY_ACCESS)