mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
Check in the IsaIoDxe device driver that consumes EFI_SIO_PROTOCOL to produce EFI_ISA_IO_PROTOCOL.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10808 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
2186f2a106
commit
558be4559a
182
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/ComponentName.c
Normal file
182
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/ComponentName.c
Normal file
@ -0,0 +1,182 @@
|
||||
/** @file
|
||||
UEFI Component Name(2) protocol implementation for Isa driver.
|
||||
|
||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#include "IsaDriver.h"
|
||||
|
||||
//
|
||||
// EFI Component Name Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gIsaIoComponentName = {
|
||||
IsaIoComponentNameGetDriverName,
|
||||
IsaIoComponentNameGetControllerName,
|
||||
"eng"
|
||||
};
|
||||
|
||||
//
|
||||
// EFI Component Name 2 Protocol
|
||||
//
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gIsaIoComponentName2 = {
|
||||
(EFI_COMPONENT_NAME2_GET_DRIVER_NAME) IsaIoComponentNameGetDriverName,
|
||||
(EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) IsaIoComponentNameGetControllerName,
|
||||
"en"
|
||||
};
|
||||
|
||||
|
||||
GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE mIsaIoDriverNameTable[] = {
|
||||
{
|
||||
"eng;en",
|
||||
L"ISA IO Driver"
|
||||
},
|
||||
{
|
||||
NULL,
|
||||
NULL
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
This function retrieves the user readable name of a driver in the form of a
|
||||
Unicode string. If the driver specified by This has a user readable name in
|
||||
the language specified by Language, then a pointer to the driver name is
|
||||
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
|
||||
by This does not support the language specified by Language,
|
||||
then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified
|
||||
in RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param DriverName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
driver specified by This in the language
|
||||
specified by Language.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the Driver specified by
|
||||
This and the language specified by Language was
|
||||
returned in DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER DriverName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
)
|
||||
{
|
||||
return LookupUnicodeString2 (
|
||||
Language,
|
||||
This->SupportedLanguages,
|
||||
mIsaIoDriverNameTable,
|
||||
DriverName,
|
||||
(BOOLEAN)(This == &gIsaIoComponentName)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
|
||||
This function retrieves the user readable name of the controller specified by
|
||||
ControllerHandle and ChildHandle in the form of a Unicode string. If the
|
||||
driver specified by This has a user readable name in the language specified by
|
||||
Language, then a pointer to the controller name is returned in ControllerName,
|
||||
and EFI_SUCCESS is returned. If the driver specified by This is not currently
|
||||
managing the controller specified by ControllerHandle and ChildHandle,
|
||||
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
|
||||
support the language specified by Language, then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param ControllerHandle[in] The handle of a controller that the driver
|
||||
specified by This is managing. This handle
|
||||
specifies the controller whose name is to be
|
||||
returned.
|
||||
|
||||
@param ChildHandle[in] The handle of the child controller to retrieve
|
||||
the name of. This is an optional parameter that
|
||||
may be NULL. It will be NULL for device
|
||||
drivers. It will also be NULL for a bus drivers
|
||||
that wish to retrieve the name of the bus
|
||||
controller. It will not be NULL for a bus
|
||||
driver that wishes to retrieve the name of a
|
||||
child controller.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified in
|
||||
RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param ControllerName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
controller specified by ControllerHandle and
|
||||
ChildHandle in the language specified by
|
||||
Language from the point of view of the driver
|
||||
specified by This.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the user readable name in
|
||||
the language specified by Language for the
|
||||
driver specified by This was returned in
|
||||
DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
|
||||
EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This is not currently
|
||||
managing the controller specified by
|
||||
ControllerHandle and ChildHandle.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
148
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/ComponentName.h
Normal file
148
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/ComponentName.h
Normal file
@ -0,0 +1,148 @@
|
||||
/** @file
|
||||
Header file for implementation of UEFI Component Name(2) protocol.
|
||||
|
||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _COMPONENT_NAME_H_
|
||||
#define _COMPONENT_NAME_H_
|
||||
|
||||
extern EFI_COMPONENT_NAME_PROTOCOL gIsaIoComponentName;
|
||||
extern EFI_COMPONENT_NAME2_PROTOCOL gIsaIoComponentName2;
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the driver.
|
||||
|
||||
This function retrieves the user readable name of a driver in the form of a
|
||||
Unicode string. If the driver specified by This has a user readable name in
|
||||
the language specified by Language, then a pointer to the driver name is
|
||||
returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
|
||||
by This does not support the language specified by Language,
|
||||
then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified
|
||||
in RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param DriverName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
driver specified by This in the language
|
||||
specified by Language.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the Driver specified by
|
||||
This and the language specified by Language was
|
||||
returned in DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER DriverName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoComponentNameGetDriverName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **DriverName
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Retrieves a Unicode string that is the user readable name of the controller
|
||||
that is being managed by a driver.
|
||||
|
||||
This function retrieves the user readable name of the controller specified by
|
||||
ControllerHandle and ChildHandle in the form of a Unicode string. If the
|
||||
driver specified by This has a user readable name in the language specified by
|
||||
Language, then a pointer to the controller name is returned in ControllerName,
|
||||
and EFI_SUCCESS is returned. If the driver specified by This is not currently
|
||||
managing the controller specified by ControllerHandle and ChildHandle,
|
||||
then EFI_UNSUPPORTED is returned. If the driver specified by This does not
|
||||
support the language specified by Language, then EFI_UNSUPPORTED is returned.
|
||||
|
||||
@param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
|
||||
EFI_COMPONENT_NAME_PROTOCOL instance.
|
||||
|
||||
@param ControllerHandle[in] The handle of a controller that the driver
|
||||
specified by This is managing. This handle
|
||||
specifies the controller whose name is to be
|
||||
returned.
|
||||
|
||||
@param ChildHandle[in] The handle of the child controller to retrieve
|
||||
the name of. This is an optional parameter that
|
||||
may be NULL. It will be NULL for device
|
||||
drivers. It will also be NULL for a bus drivers
|
||||
that wish to retrieve the name of the bus
|
||||
controller. It will not be NULL for a bus
|
||||
driver that wishes to retrieve the name of a
|
||||
child controller.
|
||||
|
||||
@param Language[in] A pointer to a Null-terminated ASCII string
|
||||
array indicating the language. This is the
|
||||
language of the driver name that the caller is
|
||||
requesting, and it must match one of the
|
||||
languages specified in SupportedLanguages. The
|
||||
number of languages supported by a driver is up
|
||||
to the driver writer. Language is specified in
|
||||
RFC 4646 or ISO 639-2 language code format.
|
||||
|
||||
@param ControllerName[out] A pointer to the Unicode string to return.
|
||||
This Unicode string is the name of the
|
||||
controller specified by ControllerHandle and
|
||||
ChildHandle in the language specified by
|
||||
Language from the point of view of the driver
|
||||
specified by This.
|
||||
|
||||
@retval EFI_SUCCESS The Unicode string for the user readable name in
|
||||
the language specified by Language for the
|
||||
driver specified by This was returned in
|
||||
DriverName.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
|
||||
EFI_HANDLE.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER Language is NULL.
|
||||
|
||||
@retval EFI_INVALID_PARAMETER ControllerName is NULL.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This is not currently
|
||||
managing the controller specified by
|
||||
ControllerHandle and ChildHandle.
|
||||
|
||||
@retval EFI_UNSUPPORTED The driver specified by This does not support
|
||||
the language specified by Language.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoComponentNameGetControllerName (
|
||||
IN EFI_COMPONENT_NAME_PROTOCOL *This,
|
||||
IN EFI_HANDLE ControllerHandle,
|
||||
IN EFI_HANDLE ChildHandle OPTIONAL,
|
||||
IN CHAR8 *Language,
|
||||
OUT CHAR16 **ControllerName
|
||||
);
|
||||
|
||||
#endif
|
||||
|
339
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaDriver.c
Normal file
339
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaDriver.c
Normal file
@ -0,0 +1,339 @@
|
||||
/** @file
|
||||
IsaIo UEFI driver.
|
||||
|
||||
Produce an instance of the ISA I/O Protocol for every SIO controller.
|
||||
|
||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#include "IsaDriver.h"
|
||||
|
||||
//
|
||||
// IsaIo Driver Global Variables
|
||||
//
|
||||
EFI_DRIVER_BINDING_PROTOCOL gIsaIoDriver = {
|
||||
IsaIoDriverSupported,
|
||||
IsaIoDriverStart,
|
||||
IsaIoDriverStop,
|
||||
0xa,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
/**
|
||||
The main entry point for the IsaIo driver.
|
||||
|
||||
@param[in] ImageHandle The firmware allocated handle for the EFI image.
|
||||
@param[in] SystemTable A pointer to the EFI System Table.
|
||||
|
||||
@retval EFI_SUCCESS The entry point is executed successfully.
|
||||
@retval EFI_OUT_OF_RESOURCES There was not enough memory in pool to install all the protocols.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InitializeIsaIo (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
//
|
||||
// Install driver model protocol(s).
|
||||
//
|
||||
Status = EfiLibInstallDriverBindingComponentName2 (
|
||||
ImageHandle,
|
||||
SystemTable,
|
||||
&gIsaIoDriver,
|
||||
ImageHandle,
|
||||
&gIsaIoComponentName,
|
||||
&gIsaIoComponentName2
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Tests to see if a controller can be managed by the IsaIo driver.
|
||||
|
||||
@param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
|
||||
@param[in] Controller The handle of the controller to test.
|
||||
@param[in] RemainingDevicePath A pointer to the remaining portion of a device path.
|
||||
|
||||
@retval EFI_SUCCESS The device is supported by this driver.
|
||||
@retval EFI_ALREADY_STARTED The device is already being managed by this driver.
|
||||
@retval EFI_ACCESS_DENIED The device is already being managed by a different driver
|
||||
or an application that requires exclusive access.
|
||||
@retval EFI_UNSUPPORTED The device is is not supported by this driver.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoDriverSupported (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
EFI_SIO_PROTOCOL *Sio;
|
||||
EFI_HANDLE PciHandle;
|
||||
|
||||
//
|
||||
// Try to open EFI DEVICE PATH protocol on the controller
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &DevicePath,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
);
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// Get the PciIo protocol from its parent controller.
|
||||
//
|
||||
Status = gBS->LocateDevicePath (&gEfiPciIoProtocolGuid, &DevicePath, &PciHandle);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
if ((DevicePathType (DevicePath) != ACPI_DEVICE_PATH) ||
|
||||
((DevicePathSubType (DevicePath) != ACPI_DP) && (DevicePathSubType (DevicePath) != ACPI_EXTENDED_DP))) {
|
||||
Status = EFI_UNSUPPORTED;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Try to open the Super IO protocol on the controller
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiSioProtocolGuid,
|
||||
(VOID **) &Sio,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiSioProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Start this driver on ControllerHandle.
|
||||
|
||||
The Start() function is designed to be invoked from the EFI boot service ConnectController().
|
||||
As a result, much of the error checking on the parameters to Start() has been moved into this
|
||||
common boot service. It is legal to call Start() from other locations, but the following calling
|
||||
restrictions must be followed or the system behavior will not be deterministic.
|
||||
1. ControllerHandle must be a valid EFI_HANDLE.
|
||||
2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned
|
||||
EFI_DEVICE_PATH_PROTOCOL.
|
||||
3. Prior to calling Start(), the Supported() function for the driver specified by This must
|
||||
have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS.
|
||||
|
||||
@param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
|
||||
@param[in] ControllerHandle The handle of the controller to start. This handle
|
||||
must support a protocol interface that supplies
|
||||
an I/O abstraction to the driver.
|
||||
@param[in] RemainingDevicePath A pointer to the remaining portion of a device path.
|
||||
This parameter is ignored by device drivers, and is optional for bus drivers.
|
||||
|
||||
@retval EFI_SUCCESS The device was started.
|
||||
@retval EFI_DEVICE_ERROR The device could not be started due to a device error.
|
||||
Currently not implemented.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
@retval Others The driver failded to start the device.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoDriverStart (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
EFI_HANDLE PciHandle;
|
||||
EFI_SIO_PROTOCOL *Sio;
|
||||
ACPI_RESOURCE_HEADER_PTR Resources;
|
||||
EFI_DEVICE_PATH_PROTOCOL *AcpiNode;
|
||||
ISA_IO_DEVICE *IsaIoDevice;
|
||||
|
||||
PciIo = NULL;
|
||||
Sio = NULL;
|
||||
|
||||
//
|
||||
// Open Device Path Protocol
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiDevicePathProtocolGuid,
|
||||
(VOID **) &DevicePath,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
//
|
||||
// Get the PciIo protocol from its parent controller.
|
||||
//
|
||||
AcpiNode = DevicePath;
|
||||
Status = gBS->LocateDevicePath (&gEfiPciIoProtocolGuid, &AcpiNode, &PciHandle);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
//
|
||||
// AcpiNode should point to the ACPI node now.
|
||||
//
|
||||
ASSERT ((DevicePathType (AcpiNode) == ACPI_DEVICE_PATH) &&
|
||||
((DevicePathSubType (AcpiNode) == ACPI_DP) || (DevicePathSubType (AcpiNode) == ACPI_EXTENDED_DP))
|
||||
);
|
||||
|
||||
Status = gBS->HandleProtocol (PciHandle, &gEfiPciIoProtocolGuid, &PciIo);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
//
|
||||
// Open Super IO Protocol
|
||||
//
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiSioProtocolGuid,
|
||||
(VOID **) &Sio,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_BY_DRIVER
|
||||
);
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
//
|
||||
// Fail due to LocateDevicePath(...) or OpenProtocol(Sio, BY_DRIVER)
|
||||
//
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = Sio->GetResources (Sio, &Resources);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
IsaIoDevice = AllocatePool (sizeof (ISA_IO_DEVICE));
|
||||
ASSERT (IsaIoDevice != NULL);
|
||||
|
||||
IsaIoDevice->Signature = ISA_IO_DEVICE_SIGNATURE;
|
||||
IsaIoDevice->PciIo = PciIo;
|
||||
|
||||
//
|
||||
// Initialize the ISA I/O instance structure
|
||||
//
|
||||
InitializeIsaIoInstance (IsaIoDevice, DevicePath, Resources);
|
||||
|
||||
//
|
||||
// Install the ISA I/O protocol on the Controller handle
|
||||
//
|
||||
Status = gBS->InstallMultipleProtocolInterfaces (
|
||||
&Controller,
|
||||
&gEfiIsaIoProtocolGuid,
|
||||
&IsaIoDevice->IsaIo,
|
||||
NULL
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Stop this driver on ControllerHandle.
|
||||
|
||||
The Stop() function is designed to be invoked from the EFI boot service DisconnectController().
|
||||
As a result, much of the error checking on the parameters to Stop() has been moved
|
||||
into this common boot service. It is legal to call Stop() from other locations,
|
||||
but the following calling restrictions must be followed or the system behavior will not be deterministic.
|
||||
1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this
|
||||
same driver's Start() function.
|
||||
2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid
|
||||
EFI_HANDLE. In addition, all of these handles must have been created in this driver's
|
||||
Start() function, and the Start() function must have called OpenProtocol() on
|
||||
ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
|
||||
|
||||
@param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
|
||||
@param[in] ControllerHandle A handle to the device being stopped. The handle must
|
||||
support a bus specific I/O protocol for the driver
|
||||
to use to stop the device.
|
||||
@param[in] NumberOfChildren The number of child device handles in ChildHandleBuffer.
|
||||
@param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL
|
||||
if NumberOfChildren is 0.
|
||||
|
||||
@retval EFI_SUCCESS The device was stopped.
|
||||
@retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoDriverStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL * This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE * ChildHandleBuffer OPTIONAL
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
ISA_IO_DEVICE *IsaIoDevice;
|
||||
EFI_ISA_IO_PROTOCOL *IsaIo;
|
||||
|
||||
Status = gBS->OpenProtocol (
|
||||
Controller,
|
||||
&gEfiIsaIoProtocolGuid,
|
||||
(VOID **) &IsaIo,
|
||||
This->DriverBindingHandle,
|
||||
Controller,
|
||||
EFI_OPEN_PROTOCOL_GET_PROTOCOL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
|
||||
IsaIoDevice = ISA_IO_DEVICE_FROM_ISA_IO_THIS (IsaIo);
|
||||
|
||||
Status = gBS->UninstallMultipleProtocolInterfaces (
|
||||
Controller,
|
||||
&gEfiIsaIoProtocolGuid,
|
||||
&IsaIoDevice->IsaIo,
|
||||
NULL
|
||||
);
|
||||
if (!EFI_ERROR (Status)) {
|
||||
Status = gBS->CloseProtocol (
|
||||
Controller,
|
||||
&gEfiSioProtocolGuid,
|
||||
This->DriverBindingHandle,
|
||||
Controller
|
||||
);
|
||||
FreePool (IsaIoDevice->IsaIo.ResourceList);
|
||||
FreePool (IsaIoDevice);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
263
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaDriver.h
Normal file
263
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaDriver.h
Normal file
@ -0,0 +1,263 @@
|
||||
/** @file
|
||||
The header file for ISA driver
|
||||
|
||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _ISA_DRIVER_H_
|
||||
#define _ISA_DRIVER_H_
|
||||
|
||||
|
||||
#include <Uefi.h>
|
||||
|
||||
#include <Protocol/PciIo.h>
|
||||
#include <Protocol/SuperIo.h>
|
||||
#include <Protocol/ComponentName.h>
|
||||
#include <Protocol/IsaIo.h>
|
||||
#include <Protocol/DevicePath.h>
|
||||
#include <Protocol/DriverBinding.h>
|
||||
#include <Protocol/GenericMemoryTest.h>
|
||||
#include <Guid/StatusCodeDataTypeId.h>
|
||||
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/UefiDriverEntryPoint.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/ReportStatusCodeLib.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
|
||||
#include "ComponentName.h"
|
||||
|
||||
//
|
||||
// 8237 DMA registers
|
||||
//
|
||||
#define R_8237_DMA_BASE_CA_CH0 0x00
|
||||
#define R_8237_DMA_BASE_CA_CH1 0x02
|
||||
#define R_8237_DMA_BASE_CA_CH2 0x04
|
||||
#define R_8237_DMA_BASE_CA_CH3 0xd6
|
||||
#define R_8237_DMA_BASE_CA_CH5 0xc4
|
||||
#define R_8237_DMA_BASE_CA_CH6 0xc8
|
||||
#define R_8237_DMA_BASE_CA_CH7 0xcc
|
||||
|
||||
#define R_8237_DMA_BASE_CC_CH0 0x01
|
||||
#define R_8237_DMA_BASE_CC_CH1 0x03
|
||||
#define R_8237_DMA_BASE_CC_CH2 0x05
|
||||
#define R_8237_DMA_BASE_CC_CH3 0xd7
|
||||
#define R_8237_DMA_BASE_CC_CH5 0xc6
|
||||
#define R_8237_DMA_BASE_CC_CH6 0xca
|
||||
#define R_8237_DMA_BASE_CC_CH7 0xce
|
||||
|
||||
#define R_8237_DMA_MEM_LP_CH0 0x87
|
||||
#define R_8237_DMA_MEM_LP_CH1 0x83
|
||||
#define R_8237_DMA_MEM_LP_CH2 0x81
|
||||
#define R_8237_DMA_MEM_LP_CH3 0x82
|
||||
#define R_8237_DMA_MEM_LP_CH5 0x8B
|
||||
#define R_8237_DMA_MEM_LP_CH6 0x89
|
||||
#define R_8237_DMA_MEM_LP_CH7 0x8A
|
||||
|
||||
|
||||
#define R_8237_DMA_COMMAND_CH0_3 0x08
|
||||
#define R_8237_DMA_COMMAND_CH4_7 0xd0
|
||||
#define B_8237_DMA_COMMAND_GAP 0x10
|
||||
#define B_8237_DMA_COMMAND_CGE 0x04
|
||||
|
||||
|
||||
#define R_8237_DMA_STA_CH0_3 0xd8
|
||||
#define R_8237_DMA_STA_CH4_7 0xd0
|
||||
|
||||
#define R_8237_DMA_WRSMSK_CH0_3 0x0a
|
||||
#define R_8237_DMA_WRSMSK_CH4_7 0xd4
|
||||
#define B_8237_DMA_WRSMSK_CMS 0x04
|
||||
|
||||
|
||||
#define R_8237_DMA_CHMODE_CH0_3 0x0b
|
||||
#define R_8237_DMA_CHMODE_CH4_7 0xd6
|
||||
#define V_8237_DMA_CHMODE_DEMAND 0x00
|
||||
#define V_8237_DMA_CHMODE_SINGLE 0x40
|
||||
#define V_8237_DMA_CHMODE_CASCADE 0xc0
|
||||
#define B_8237_DMA_CHMODE_DECREMENT 0x20
|
||||
#define B_8237_DMA_CHMODE_INCREMENT 0x00
|
||||
#define B_8237_DMA_CHMODE_AE 0x10
|
||||
#define V_8237_DMA_CHMODE_VERIFY 0
|
||||
#define V_8237_DMA_CHMODE_IO2MEM 0x04
|
||||
#define V_8237_DMA_CHMODE_MEM2IO 0x08
|
||||
|
||||
#define R_8237_DMA_CBPR_CH0_3 0x0c
|
||||
#define R_8237_DMA_CBPR_CH4_7 0xd8
|
||||
|
||||
#define R_8237_DMA_MCR_CH0_3 0x0d
|
||||
#define R_8237_DMA_MCR_CH4_7 0xda
|
||||
|
||||
#define R_8237_DMA_CLMSK_CH0_3 0x0e
|
||||
#define R_8237_DMA_CLMSK_CH4_7 0xdc
|
||||
|
||||
#define R_8237_DMA_WRMSK_CH0_3 0x0f
|
||||
#define R_8237_DMA_WRMSK_CH4_7 0xde
|
||||
|
||||
typedef enum {
|
||||
IsaAccessTypeUnknown,
|
||||
IsaAccessTypeIo,
|
||||
IsaAccessTypeMem,
|
||||
IsaAccessTypeMaxType
|
||||
} ISA_ACCESS_TYPE;
|
||||
|
||||
typedef struct {
|
||||
UINT8 Address;
|
||||
UINT8 Page;
|
||||
UINT8 Count;
|
||||
} EFI_ISA_DMA_REGISTERS;
|
||||
|
||||
//
|
||||
// ISA I/O Device Structure
|
||||
//
|
||||
#define ISA_IO_DEVICE_SIGNATURE SIGNATURE_32 ('i', 's', 'a', 'i')
|
||||
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
EFI_HANDLE Handle;
|
||||
EFI_ISA_IO_PROTOCOL IsaIo;
|
||||
EFI_PCI_IO_PROTOCOL *PciIo;
|
||||
} ISA_IO_DEVICE;
|
||||
|
||||
#define ISA_IO_DEVICE_FROM_ISA_IO_THIS(a) CR (a, ISA_IO_DEVICE, IsaIo, ISA_IO_DEVICE_SIGNATURE)
|
||||
|
||||
//
|
||||
// Mapping structure for performing ISA DMA to a buffer above 16 MB
|
||||
//
|
||||
typedef struct {
|
||||
EFI_ISA_IO_PROTOCOL_OPERATION Operation;
|
||||
UINTN NumberOfBytes;
|
||||
UINTN NumberOfPages;
|
||||
EFI_PHYSICAL_ADDRESS HostAddress;
|
||||
EFI_PHYSICAL_ADDRESS MappedHostAddress;
|
||||
} ISA_MAP_INFO;
|
||||
|
||||
//
|
||||
// EFI Driver Binding Protocol Interface Functions
|
||||
//
|
||||
|
||||
/**
|
||||
Tests to see if a controller can be managed by the ISA Driver.
|
||||
|
||||
How the Start() function of a driver is implemented can affect how the Supported() function is implemented.
|
||||
|
||||
@param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
|
||||
@param[in] Controller The handle of the controller to test.
|
||||
@param[in] RemainingDevicePath A pointer to the remaining portion of a device path.
|
||||
|
||||
@retval EFI_SUCCESS The device is supported by this driver.
|
||||
@retval EFI_ALREADY_STARTED The device is already being managed by this driver.
|
||||
@retval EFI_ACCESS_DENIED The device is already being managed by a different driver
|
||||
or an application that requires exclusive access.
|
||||
@retval EFI_UNSUPPORTED The device is is not supported by this driver.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoDriverSupported (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Start this driver on ControllerHandle.
|
||||
|
||||
The Start() function is designed to be invoked from the EFI boot service ConnectController().
|
||||
As a result, much of the error checking on the parameters to Start() has been moved into this
|
||||
common boot service. It is legal to call Start() from other locations, but the following calling
|
||||
restrictions must be followed or the system behavior will not be deterministic.
|
||||
1. ControllerHandle must be a valid EFI_HANDLE.
|
||||
2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned
|
||||
EFI_DEVICE_PATH_PROTOCOL.
|
||||
3. Prior to calling Start(), the Supported() function for the driver specified by This must
|
||||
have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS.
|
||||
|
||||
@param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
|
||||
@param[in] ControllerHandle The handle of the controller to start. This handle
|
||||
must support a protocol interface that supplies
|
||||
an I/O abstraction to the driver.
|
||||
@param[in] RemainingDevicePath A pointer to the remaining portion of a device path.
|
||||
This parameter is ignored by device drivers, and is optional for bus drivers.
|
||||
|
||||
@retval EFI_SUCCESS The device was started.
|
||||
@retval EFI_DEVICE_ERROR The device could not be started due to a device error.
|
||||
Currently not implemented.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
@retval Others The driver failded to start the device.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoDriverStart (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL *This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
Stop this driver on ControllerHandle.
|
||||
|
||||
The Stop() function is designed to be invoked from the EFI boot service DisconnectController().
|
||||
As a result, much of the error checking on the parameters to Stop() has been moved
|
||||
into this common boot service. It is legal to call Stop() from other locations,
|
||||
but the following calling restrictions must be followed or the system behavior will not be deterministic.
|
||||
1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this
|
||||
same driver's Start() function.
|
||||
2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid
|
||||
EFI_HANDLE. In addition, all of these handles must have been created in this driver's
|
||||
Start() function, and the Start() function must have called OpenProtocol() on
|
||||
ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
|
||||
|
||||
@param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
|
||||
@param[in] ControllerHandle A handle to the device being stopped. The handle must
|
||||
support a bus specific I/O protocol for the driver
|
||||
to use to stop the device.
|
||||
@param[in] NumberOfChildren The number of child device handles in ChildHandleBuffer.
|
||||
@param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL
|
||||
if NumberOfChildren is 0.
|
||||
|
||||
@retval EFI_SUCCESS The device was stopped.
|
||||
@retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoDriverStop (
|
||||
IN EFI_DRIVER_BINDING_PROTOCOL * This,
|
||||
IN EFI_HANDLE Controller,
|
||||
IN UINTN NumberOfChildren,
|
||||
IN EFI_HANDLE * ChildHandleBuffer OPTIONAL
|
||||
);
|
||||
|
||||
//
|
||||
// Function Prototypes
|
||||
//
|
||||
|
||||
/**
|
||||
Initializes an ISA I/O Instance
|
||||
|
||||
@param[in] IsaIoDevice The isa device to be initialized.
|
||||
@param[in] DevicePath The device path of the isa device.
|
||||
@param[in] Resources The ACPI resource list.
|
||||
|
||||
**/
|
||||
VOID
|
||||
InitializeIsaIoInstance (
|
||||
IN ISA_IO_DEVICE *IsaIoDevice,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
IN ACPI_RESOURCE_HEADER_PTR Resources
|
||||
);
|
||||
|
||||
#endif
|
||||
|
1796
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIo.c
Normal file
1796
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIo.c
Normal file
File diff suppressed because it is too large
Load Diff
331
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIo.h
Normal file
331
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIo.h
Normal file
@ -0,0 +1,331 @@
|
||||
/** @file
|
||||
The header file for EFI_ISA_IO protocol implementation.
|
||||
|
||||
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
||||
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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _ISA_IO_H_
|
||||
#define _ISA_IO_H_
|
||||
|
||||
#include "IsaDriver.h"
|
||||
|
||||
//
|
||||
// Bits definition of PcdIsaBusSupportedFeatures
|
||||
//
|
||||
#define PCD_ISA_BUS_SUPPORT_DMA BIT0
|
||||
#define PCD_ISA_BUS_ONLY_SUPPORT_SLAVE_DMA BIT1
|
||||
#define PCD_ISA_BUS_SUPPORT_ISA_MEMORY BIT2
|
||||
|
||||
//
|
||||
// ISA I/O Support Function Prototypes
|
||||
//
|
||||
|
||||
/**
|
||||
Verifies access to an ISA device
|
||||
|
||||
@param[in] IsaIoDevice The ISA device to be verified.
|
||||
@param[in] Type The Access type. The input must be either IsaAccessTypeMem or IsaAccessTypeIo.
|
||||
@param[in] Width The width of the memory operation.
|
||||
@param[in] Count The number of memory operations to perform.
|
||||
@param[in] Offset The offset in ISA memory space to start the memory operation.
|
||||
|
||||
@retval EFI_SUCCESS Verify success.
|
||||
@retval EFI_INVALID_PARAMETER One of the parameters has an invalid value.
|
||||
@retval EFI_UNSUPPORTED The device ont support the access type.
|
||||
**/
|
||||
EFI_STATUS
|
||||
IsaIoVerifyAccess (
|
||||
IN ISA_IO_DEVICE *IsaIoDevice,
|
||||
IN ISA_ACCESS_TYPE Type,
|
||||
IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINTN Count,
|
||||
IN UINT32 Offset
|
||||
);
|
||||
|
||||
/**
|
||||
Performs an ISA I/O Read Cycle
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Width Specifies the width of the I/O operation.
|
||||
@param[in] Offset The offset in ISA I/O space to start the I/O operation.
|
||||
@param[in] Count The number of I/O operations to perform.
|
||||
@param[out] Buffer The destination buffer to store the results
|
||||
|
||||
@retval EFI_SUCCESS The data was read from the device sucessfully.
|
||||
@retval EFI_UNSUPPORTED The Offset is not valid for this device.
|
||||
@retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoIoRead (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT32 Offset,
|
||||
IN UINTN Count,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Performs an ISA I/O Write Cycle
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Width Specifies the width of the I/O operation.
|
||||
@param[in] Offset The offset in ISA I/O space to start the I/O operation.
|
||||
@param[in] Count The number of I/O operations to perform.
|
||||
@param[in] Buffer The source buffer to write data from
|
||||
|
||||
@retval EFI_SUCCESS The data was writen to the device sucessfully.
|
||||
@retval EFI_UNSUPPORTED The Offset is not valid for this device.
|
||||
@retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoIoWrite (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT32 Offset,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Maps a memory region for DMA
|
||||
|
||||
@param This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param Operation Indicates the type of DMA (slave or bus master), and if
|
||||
the DMA operation is going to read or write to system memory.
|
||||
@param ChannelNumber The slave channel number to use for this DMA operation.
|
||||
If Operation and ChannelAttributes shows that this device
|
||||
performs bus mastering DMA, then this field is ignored.
|
||||
The legal range for this field is 0..7.
|
||||
@param ChannelAttributes The attributes of the DMA channel to use for this DMA operation
|
||||
@param HostAddress The system memory address to map to the device.
|
||||
@param NumberOfBytes On input the number of bytes to map. On output the number
|
||||
of bytes that were mapped.
|
||||
@param DeviceAddress The resulting map address for the bus master device to use
|
||||
to access the hosts HostAddress.
|
||||
@param Mapping A resulting value to pass to EFI_ISA_IO.Unmap().
|
||||
|
||||
@retval EFI_SUCCESS The range was mapped for the returned NumberOfBytes.
|
||||
@retval EFI_INVALID_PARAMETER The Operation or HostAddress is undefined.
|
||||
@retval EFI_UNSUPPORTED The HostAddress can not be mapped as a common buffer.
|
||||
@retval EFI_DEVICE_ERROR The system hardware could not map the requested address.
|
||||
@retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoMap (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN EFI_ISA_IO_PROTOCOL_OPERATION Operation,
|
||||
IN UINT8 ChannelNumber OPTIONAL,
|
||||
IN UINT32 ChannelAttributes,
|
||||
IN VOID *HostAddress,
|
||||
IN OUT UINTN *NumberOfBytes,
|
||||
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
|
||||
OUT VOID **Mapping
|
||||
);
|
||||
|
||||
/**
|
||||
Unmaps a memory region for DMA
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Mapping The mapping value returned from EFI_ISA_IO.Map().
|
||||
|
||||
@retval EFI_SUCCESS The range was unmapped.
|
||||
@retval EFI_DEVICE_ERROR The data was not committed to the target system memory.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoUnmap (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN VOID *Mapping
|
||||
);
|
||||
|
||||
/**
|
||||
Flushes any posted write data to the system memory.
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
|
||||
@retval EFI_SUCCESS The buffers were flushed.
|
||||
@retval EFI_DEVICE_ERROR The buffers were not flushed due to a hardware error.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoFlush (
|
||||
IN EFI_ISA_IO_PROTOCOL *This
|
||||
);
|
||||
|
||||
/**
|
||||
Writes I/O operation base address and count number to a 8 bit I/O Port.
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] AddrOffset The address' offset.
|
||||
@param[in] PageOffset The page's offest.
|
||||
@param[in] CountOffset The count's offset.
|
||||
@param[in] BaseAddress The base address.
|
||||
@param[in] Count The number of I/O operations to perform.
|
||||
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_INVALID_PARAMETER Parameter is invalid.
|
||||
@retval EFI_UNSUPPORTED The address range specified by these Offsets and Count is not valid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
WriteDmaPort (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN UINT32 AddrOffset,
|
||||
IN UINT32 PageOffset,
|
||||
IN UINT32 CountOffset,
|
||||
IN UINT32 BaseAddress,
|
||||
IN UINT16 Count
|
||||
);
|
||||
|
||||
/**
|
||||
Writes an 8-bit I/O Port
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Offset The offset in ISA IO space to start the IO operation.
|
||||
@param[in] Value The data to write port.
|
||||
|
||||
@retval EFI_SUCCESS Success.
|
||||
@retval EFI_INVALID_PARAMETER Parameter is invalid.
|
||||
@retval EFI_UNSUPPORTED The address range specified by Offset is not valid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
WritePort (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN UINT32 Offset,
|
||||
IN UINT8 Value
|
||||
);
|
||||
|
||||
/**
|
||||
Performs an ISA Memory Read Cycle
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Width Specifies the width of the memory operation.
|
||||
@param[in] Offset The offset in ISA memory space to start the memory operation.
|
||||
@param[in] Count The number of memory operations to perform.
|
||||
@param[out] Buffer The destination buffer to store the results
|
||||
|
||||
@retval EFI_SUCCESS The data was read from the device successfully.
|
||||
@retval EFI_UNSUPPORTED The Offset is not valid for this device.
|
||||
@retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoMemRead (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT32 Offset,
|
||||
IN UINTN Count,
|
||||
OUT VOID *Buffer
|
||||
);
|
||||
|
||||
|
||||
/**
|
||||
Performs an ISA Memory Write Cycle
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Width Specifies the width of the memory operation.
|
||||
@param[in] Offset The offset in ISA memory space to start the memory operation.
|
||||
@param[in] Count The number of memory operations to perform.
|
||||
@param[in] Buffer The source buffer to write data from
|
||||
|
||||
@retval EFI_SUCCESS The data was written to the device sucessfully.
|
||||
@retval EFI_UNSUPPORTED The Offset is not valid for this device.
|
||||
@retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoMemWrite (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT32 Offset,
|
||||
IN UINTN Count,
|
||||
IN VOID *Buffer
|
||||
);
|
||||
|
||||
/**
|
||||
Copy one region of ISA memory space to another region of ISA memory space on the ISA controller.
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Width Specifies the width of the memory copy operation.
|
||||
@param[in] DestOffset The offset of the destination
|
||||
@param[in] SrcOffset The offset of the source
|
||||
@param[in] Count The number of memory copy operations to perform
|
||||
|
||||
@retval EFI_SUCCESS The data was copied sucessfully.
|
||||
@retval EFI_UNSUPPORTED The DestOffset or SrcOffset is not valid for this device.
|
||||
@retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
|
||||
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoCopyMem (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT32 DestOffset,
|
||||
IN UINT32 SrcOffset,
|
||||
IN UINTN Count
|
||||
);
|
||||
|
||||
/**
|
||||
Allocates pages that are suitable for an EfiIsaIoOperationBusMasterCommonBuffer mapping.
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Type The type allocation to perform.
|
||||
@param[in] MemoryType The type of memory to allocate.
|
||||
@param[in] Pages The number of pages to allocate.
|
||||
@param[out] HostAddress A pointer to store the base address of the allocated range.
|
||||
@param[in] Attributes The requested bit mask of attributes for the allocated range.
|
||||
|
||||
@retval EFI_SUCCESS The requested memory pages were allocated.
|
||||
@retval EFI_INVALID_PARAMETER Type is invalid or MemoryType is invalid or HostAddress is NULL
|
||||
@retval EFI_UNSUPPORTED Attributes is unsupported or the memory range specified
|
||||
by HostAddress, Pages, and Type is not available for common buffer use.
|
||||
@retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoAllocateBuffer (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN EFI_ALLOCATE_TYPE Type,
|
||||
IN EFI_MEMORY_TYPE MemoryType,
|
||||
IN UINTN Pages,
|
||||
OUT VOID **HostAddress,
|
||||
IN UINT64 Attributes
|
||||
);
|
||||
|
||||
/**
|
||||
Frees memory that was allocated with EFI_ISA_IO.AllocateBuffer().
|
||||
|
||||
@param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
|
||||
@param[in] Pages The number of pages to free.
|
||||
@param[in] HostAddress The base address of the allocated range.
|
||||
|
||||
@retval EFI_SUCCESS The requested memory pages were freed.
|
||||
@retval EFI_INVALID_PARAMETER The memory was not allocated with EFI_ISA_IO.AllocateBufer().
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
IsaIoFreeBuffer (
|
||||
IN EFI_ISA_IO_PROTOCOL *This,
|
||||
IN UINTN Pages,
|
||||
IN VOID *HostAddress
|
||||
);
|
||||
|
||||
#endif
|
||||
|
67
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
Normal file
67
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
Normal file
@ -0,0 +1,67 @@
|
||||
## @file
|
||||
# Component description file for IsaIoDxe module.
|
||||
#
|
||||
# Produces an instance of the ISA I/O Protocol for every SIO controller.
|
||||
#
|
||||
# Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# 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.
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = IsaIoDxe
|
||||
FILE_GUID = 61AD3083-DCAD-4850-A50C-73B23B3B14F9
|
||||
MODULE_TYPE = UEFI_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = InitializeIsaIo
|
||||
|
||||
#
|
||||
# VALID_ARCHITECTURES = IA32 X64 IPF EBC
|
||||
# DRIVER_BINDING = gIsaIoDriver
|
||||
# COMPONENT_NAME = gIsaIoComponentName;
|
||||
# COMPONENT_NAME2 = gIsaIoComponentName2;
|
||||
#
|
||||
|
||||
[Sources]
|
||||
ComponentName.h
|
||||
ComponentName.c
|
||||
IsaIo.h
|
||||
IsaIo.c
|
||||
IsaDriver.h
|
||||
IsaDriver.c
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
IntelFrameworkPkg/IntelFrameworkPkg.dec
|
||||
IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
PcdLib
|
||||
ReportStatusCodeLib
|
||||
UefiBootServicesTableLib
|
||||
MemoryAllocationLib
|
||||
BaseMemoryLib
|
||||
DevicePathLib
|
||||
UefiLib
|
||||
UefiDriverEntryPoint
|
||||
DebugLib
|
||||
|
||||
[Protocols]
|
||||
gEfiIsaIoProtocolGuid # PROTOCOL BY_START
|
||||
gEfiSioProtocolGuid # PROTOCOL TO_START
|
||||
gEfiPciIoProtocolGuid # PROTOCOL TO_START
|
||||
gEfiDevicePathProtocolGuid # PROTOCOL TO_START
|
||||
gEfiGenericMemTestProtocolGuid # PROTOCOL TO_START
|
||||
|
||||
[Pcd]
|
||||
gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdIsaBusSupportedFeatures
|
||||
|
||||
|
@ -128,6 +128,7 @@
|
||||
|
||||
IntelFrameworkModulePkg/Bus/Pci/IdeBusDxe/IdeBusDxe.inf
|
||||
IntelFrameworkModulePkg/Bus/Isa/IsaBusDxe/IsaBusDxe.inf
|
||||
IntelFrameworkModulePkg/Bus/Isa/IsaIoDxe/IsaIoDxe.inf
|
||||
IntelFrameworkModulePkg/Bus/Isa/IsaFloppyDxe/IsaFloppyDxe.inf
|
||||
IntelFrameworkModulePkg/Bus/Isa/IsaSerialDxe/IsaSerialDxe.inf
|
||||
IntelFrameworkModulePkg/Bus/Isa/Ps2KeyboardDxe/Ps2keyboardDxe.inf
|
||||
|
Loading…
x
Reference in New Issue
Block a user