2006-04-22 00:54:32 +02:00
|
|
|
/*++
|
|
|
|
Copyright (c) 2006, Intel Corporation
|
|
|
|
All rights reserved. This program and the accompanying materials
|
|
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
|
|
|
|
idebus.h
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
|
|
|
|
Header file for IDE Bus Driver.
|
|
|
|
|
|
|
|
Revision History
|
|
|
|
++*/
|
|
|
|
|
|
|
|
// TODO: fix comment to end with --*/
|
|
|
|
#ifndef _IDE_BUS_H
|
|
|
|
#define _IDE_BUS_H
|
|
|
|
|
|
|
|
|
2006-05-23 01:24:23 +02:00
|
|
|
#include <IndustryStandard/pci22.h>
|
2006-04-22 00:54:32 +02:00
|
|
|
#include "idedata.h"
|
|
|
|
|
|
|
|
//
|
|
|
|
// Extra Definition to porting
|
|
|
|
//
|
|
|
|
#define EFI_MIN(a, b) (((a) < (b)) ? (a) : (b))
|
|
|
|
|
|
|
|
#define MAX_IDE_DEVICE 4
|
|
|
|
#define MAX_IDE_CHANNELS 2
|
|
|
|
#define MAX_IDE_DRIVES 2
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
BOOLEAN HaveScannedDevice[MAX_IDE_DEVICE];
|
|
|
|
BOOLEAN DeviceFound[MAX_IDE_DEVICE];
|
|
|
|
BOOLEAN DeviceProcessed[MAX_IDE_DEVICE];
|
|
|
|
} IDE_BUS_DRIVER_PRIVATE_DATA;
|
|
|
|
|
|
|
|
#define IDE_BLK_IO_DEV_SIGNATURE EFI_SIGNATURE_32 ('i', 'b', 'i', 'd')
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
UINT32 Signature;
|
|
|
|
|
|
|
|
EFI_HANDLE Handle;
|
|
|
|
EFI_BLOCK_IO_PROTOCOL BlkIo;
|
|
|
|
EFI_BLOCK_IO_MEDIA BlkMedia;
|
|
|
|
EFI_DISK_INFO_PROTOCOL DiskInfo;
|
|
|
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
|
|
|
EFI_PCI_IO_PROTOCOL *PciIo;
|
|
|
|
IDE_BUS_DRIVER_PRIVATE_DATA *IdeBusDriverPrivateData;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Local Data for IDE interface goes here
|
|
|
|
//
|
|
|
|
EFI_IDE_CHANNEL Channel;
|
|
|
|
EFI_IDE_DEVICE Device;
|
|
|
|
UINT16 Lun;
|
|
|
|
IDE_DEVICE_TYPE Type;
|
|
|
|
|
|
|
|
IDE_BASE_REGISTERS *IoPort;
|
|
|
|
UINT16 AtapiError;
|
|
|
|
|
|
|
|
INQUIRY_DATA *pInquiryData;
|
|
|
|
EFI_IDENTIFY_DATA *pIdData;
|
|
|
|
ATA_PIO_MODE PioMode;
|
|
|
|
ATA_UDMA_MODE UDma_Mode;
|
|
|
|
CHAR8 ModelName[41];
|
|
|
|
REQUEST_SENSE_DATA *SenseData;
|
|
|
|
UINT8 SenseDataNumber;
|
|
|
|
UINT8 *Cache;
|
|
|
|
|
|
|
|
EFI_UNICODE_STRING_TABLE *ControllerNameTable;
|
|
|
|
} IDE_BLK_IO_DEV;
|
|
|
|
|
|
|
|
#include "ComponentName.h"
|
|
|
|
|
|
|
|
#define IDE_BLOCK_IO_DEV_FROM_THIS(a) CR (a, IDE_BLK_IO_DEV, BlkIo, IDE_BLK_IO_DEV_SIGNATURE)
|
|
|
|
#define IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS(a) CR (a, IDE_BLK_IO_DEV, DiskInfo, IDE_BLK_IO_DEV_SIGNATURE)
|
|
|
|
|
|
|
|
//
|
|
|
|
// Global Variables
|
|
|
|
//
|
|
|
|
extern EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding;
|
|
|
|
|
|
|
|
#include "ide.h"
|
|
|
|
|
|
|
|
//
|
|
|
|
// Prototypes
|
|
|
|
// Driver model protocol interface
|
|
|
|
//
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBusControllerDriverEntryPoint (
|
|
|
|
IN EFI_HANDLE ImageHandle,
|
|
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
ImageHandle - TODO: add argument description
|
|
|
|
SystemTable - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBusDriverBindingSupported (
|
|
|
|
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
|
|
|
IN EFI_HANDLE Controller,
|
|
|
|
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
Controller - TODO: add argument description
|
|
|
|
RemainingDevicePath - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBusDriverBindingStart (
|
|
|
|
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
|
|
|
IN EFI_HANDLE Controller,
|
|
|
|
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
Controller - TODO: add argument description
|
|
|
|
RemainingDevicePath - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBusDriverBindingStop (
|
|
|
|
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
|
|
|
IN EFI_HANDLE Controller,
|
|
|
|
IN UINTN NumberOfChildren,
|
|
|
|
IN EFI_HANDLE *ChildHandleBuffer
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
Controller - TODO: add argument description
|
|
|
|
NumberOfChildren - TODO: add argument description
|
|
|
|
ChildHandleBuffer - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
//
|
|
|
|
// Block I/O Protocol Interface
|
|
|
|
//
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBlkIoReset (
|
|
|
|
IN EFI_BLOCK_IO_PROTOCOL *This,
|
|
|
|
IN BOOLEAN ExtendedVerification
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
ExtendedVerification - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBlkIoReadBlocks (
|
|
|
|
IN EFI_BLOCK_IO_PROTOCOL *This,
|
|
|
|
IN UINT32 MediaId,
|
|
|
|
IN EFI_LBA LBA,
|
|
|
|
IN UINTN BufferSize,
|
|
|
|
OUT VOID *Buffer
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
MediaId - TODO: add argument description
|
|
|
|
LBA - TODO: add argument description
|
|
|
|
BufferSize - TODO: add argument description
|
|
|
|
Buffer - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBlkIoWriteBlocks (
|
|
|
|
IN EFI_BLOCK_IO_PROTOCOL *This,
|
|
|
|
IN UINT32 MediaId,
|
|
|
|
IN EFI_LBA LBA,
|
|
|
|
IN UINTN BufferSize,
|
|
|
|
IN VOID *Buffer
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
MediaId - TODO: add argument description
|
|
|
|
LBA - TODO: add argument description
|
|
|
|
BufferSize - TODO: add argument description
|
|
|
|
Buffer - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEBlkIoFlushBlocks (
|
|
|
|
IN EFI_BLOCK_IO_PROTOCOL *This
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
IDERegisterDecodeEnableorDisable (
|
|
|
|
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
|
|
|
IN BOOLEAN Enable
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
PciIo - TODO: add argument description
|
|
|
|
Enable - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEDiskInfoInquiry (
|
|
|
|
IN EFI_DISK_INFO_PROTOCOL *This,
|
|
|
|
IN OUT VOID *InquiryData,
|
|
|
|
IN OUT UINT32 *IntquiryDataSize
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
InquiryData - TODO: add argument description
|
|
|
|
IntquiryDataSize - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEDiskInfoIdentify (
|
|
|
|
IN EFI_DISK_INFO_PROTOCOL *This,
|
|
|
|
IN OUT VOID *IdentifyData,
|
|
|
|
IN OUT UINT32 *IdentifyDataSize
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
IdentifyData - TODO: add argument description
|
|
|
|
IdentifyDataSize - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEDiskInfoSenseData (
|
|
|
|
IN EFI_DISK_INFO_PROTOCOL *This,
|
|
|
|
IN OUT VOID *SenseData,
|
|
|
|
IN OUT UINT32 *SenseDataSize,
|
|
|
|
OUT UINT8 *SenseDataNumber
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
SenseData - TODO: add argument description
|
|
|
|
SenseDataSize - TODO: add argument description
|
|
|
|
SenseDataNumber - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
EFIAPI
|
|
|
|
IDEDiskInfoWhichIde (
|
|
|
|
IN EFI_DISK_INFO_PROTOCOL *This,
|
|
|
|
OUT UINT32 *IdeChannel,
|
|
|
|
OUT UINT32 *IdeDevice
|
|
|
|
)
|
|
|
|
/*++
|
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
This - TODO: add argument description
|
|
|
|
IdeChannel - TODO: add argument description
|
|
|
|
IdeDevice - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
|
|
|
--*/
|
|
|
|
;
|
|
|
|
|
|
|
|
#endif
|