You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
2.6 KiB
126 lines
2.6 KiB
/*++
|
|
|
|
Copyright (c) 1990 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
ixphwsup.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the IopXxx routines for the NT I/O system that
|
|
are hardware dependent. Were these routines not hardware dependent,
|
|
they would normally reside in the internal.c module.
|
|
|
|
Author:
|
|
|
|
Darryl E. Havens (darrylh) 11-Apr-1990
|
|
|
|
Environment:
|
|
|
|
Kernel mode, local to I/O system
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
#include "bootia64.h"
|
|
#include "arc.h"
|
|
#include "ixfwhal.h"
|
|
#if defined(NEC_98)
|
|
#include "nec98.h"
|
|
#else //NEC_98
|
|
#include "eisa.h"
|
|
#endif //NEC_98
|
|
|
|
|
|
PADAPTER_OBJECT
|
|
IopAllocateAdapter(
|
|
IN ULONG MapRegistersPerChannel,
|
|
IN PVOID AdapterBaseVa,
|
|
IN PVOID ChannelNumber
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
This routine allocates and initializes an adapter object to represent an
|
|
adapter or a DMA controller on the system. If no map registers are required
|
|
then a standalone adapter object is allocated with no master adapter.
|
|
|
|
If map registers are required, then a master adapter object is used to
|
|
allocate the map registers. For Isa systems these registers are really
|
|
phyically contiguous memory pages.
|
|
|
|
Arguments:
|
|
|
|
MapRegistersPerChannel - Specifies the number of map registers that each
|
|
channel provides for I/O memory mapping.
|
|
|
|
AdapterBaseVa - Address of the the DMA controller.
|
|
|
|
ChannelNumber - Unused.
|
|
|
|
Return Value:
|
|
|
|
The function value is a pointer to the allocate adapter object.
|
|
|
|
--*/
|
|
|
|
{
|
|
|
|
PADAPTER_OBJECT AdapterObject;
|
|
CSHORT Size;
|
|
|
|
UNREFERENCED_PARAMETER( ChannelNumber );
|
|
UNREFERENCED_PARAMETER( MapRegistersPerChannel );
|
|
|
|
//
|
|
// Determine the size of the adapter.
|
|
//
|
|
|
|
Size = sizeof( ADAPTER_OBJECT );
|
|
|
|
//
|
|
// Now create the adapter object.
|
|
//
|
|
|
|
AdapterObject = FwAllocateHeap(Size);
|
|
|
|
//
|
|
// If the adapter object was successfully created, then attempt to insert
|
|
// it into the the object table.
|
|
//
|
|
|
|
if (AdapterObject) {
|
|
|
|
RtlZeroMemory(AdapterObject, Size);
|
|
|
|
//
|
|
// Initialize the adapter object itself.
|
|
//
|
|
|
|
AdapterObject->Type = IO_TYPE_ADAPTER;
|
|
AdapterObject->Size = Size;
|
|
AdapterObject->MapRegistersPerChannel = 0;
|
|
AdapterObject->AdapterBaseVa = AdapterBaseVa;
|
|
AdapterObject->PagePort = NULL;
|
|
AdapterObject->AdapterInUse = FALSE;
|
|
|
|
} else {
|
|
|
|
//
|
|
// An error was incurred for some reason. Set the return value
|
|
// to NULL.
|
|
//
|
|
|
|
return(NULL);
|
|
}
|
|
|
|
return AdapterObject;
|
|
|
|
}
|
|
|
|
|