Leaked source code of windows server 2003
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.
 
 
 
 
 
 

156 lines
6.2 KiB

/*++
Copyright (c) 1999, 2000 Microsoft Corporation
Module Name:
mpinit.c
Abstract:
miniport initialization
Environment:
kernel mode only
Notes:
THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR
PURPOSE.
Copyright (c) 1999, 2000 Microsoft Corporation. All Rights Reserved.
Revision History:
7-17-00 : copied, jsenior
--*/
#include "pch.h"
// global registration packet for this miniport
USBPORT_REGISTRATION_PACKET RegistrationPacket;
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
/*++
Routine Description:
Installable driver initialization entry point.
This entry point is called directly by the I/O system.
Arguments:
DriverObject - pointer to the driver object
RegistryPath - pointer to a unicode string representing the path
to driver-specific key in the registry
Return Value:
STATUS_SUCCESS if successful,
STATUS_UNSUCCESSFUL otherwise
--*/
{
RegistrationPacket.DeviceDataSize = sizeof(DEVICE_DATA);
RegistrationPacket.EndpointDataSize = sizeof(ENDPOINT_DATA);
RegistrationPacket.TransferContextSize = sizeof(TRANSFER_CONTEXT);
// enough for 4k frame list plus 4k of scratch space
// enough for 4k frame list and interrupt schdule (63 nodes)
// + static bulk + static control + pixx4 hack queue heads
// this ends up being about 3 pages
RegistrationPacket.CommonBufferBytes = 4096 +
((NO_INTERRUPT_QH_LISTS + 3) * sizeof(HCD_QUEUEHEAD_DESCRIPTOR)) + \
(SOF_TD_COUNT * sizeof(HCD_TRANSFER_DESCRIPTOR));
RegistrationPacket.MINIPORT_StartController = UhciStartController;
RegistrationPacket.MINIPORT_StopController = UhciStopController;
RegistrationPacket.MINIPORT_EnableInterrupts = UhciEnableInterrupts;
RegistrationPacket.MINIPORT_DisableInterrupts = UhciDisableInterrupts;
RegistrationPacket.MINIPORT_InterruptService = UhciInterruptService;
RegistrationPacket.MINIPORT_InterruptDpc = UhciInterruptDpc;
RegistrationPacket.MINIPORT_SuspendController = UhciSuspendController;
RegistrationPacket.MINIPORT_ResumeController = UhciResumeController;
//
// Root hub control entry points
//
RegistrationPacket.MINIPORT_RH_DisableIrq = UhciRHDisableIrq;
RegistrationPacket.MINIPORT_RH_EnableIrq = UhciRHEnableIrq;
RegistrationPacket.MINIPORT_RH_GetRootHubData = UhciRHGetRootHubData;
RegistrationPacket.MINIPORT_RH_GetStatus = UhciRHGetStatus;
RegistrationPacket.MINIPORT_RH_GetHubStatus = UhciRHGetHubStatus;
RegistrationPacket.MINIPORT_RH_GetPortStatus = UhciRHGetPortStatus;
//
// Individual root hub port entry points
//
RegistrationPacket.MINIPORT_RH_SetFeaturePortReset = UhciRHSetFeaturePortReset;
RegistrationPacket.MINIPORT_RH_SetFeaturePortEnable = UhciRHSetFeaturePortEnable;
RegistrationPacket.MINIPORT_RH_SetFeaturePortPower = UhciRHSetFeaturePortPower;
RegistrationPacket.MINIPORT_RH_SetFeaturePortSuspend = UhciRHSetFeaturePortSuspend;
RegistrationPacket.MINIPORT_RH_ClearFeaturePortSuspend = UhciRHClearFeaturePortSuspend;
RegistrationPacket.MINIPORT_RH_ClearFeaturePortEnable = UhciRHClearFeaturePortEnable;
RegistrationPacket.MINIPORT_RH_ClearFeaturePortPower = UhciRHClearFeaturePortPower;
// Change bits
RegistrationPacket.MINIPORT_RH_ClearFeaturePortConnectChange = UhciRHClearFeaturePortConnectChange;
RegistrationPacket.MINIPORT_RH_ClearFeaturePortResetChange = UhciRHClearFeaturePortResetChange;
RegistrationPacket.MINIPORT_RH_ClearFeaturePortEnableChange = UhciRHClearFeaturePortEnableChange;
RegistrationPacket.MINIPORT_RH_ClearFeaturePortSuspendChange = UhciRHClearFeaturePortSuspendChange;
RegistrationPacket.MINIPORT_RH_ClearFeaturePortOvercurrentChange = UhciRHClearFeaturePortOvercurrentChange;
RegistrationPacket.MINIPORT_SetEndpointStatus = UhciSetEndpointStatus;
RegistrationPacket.MINIPORT_GetEndpointStatus = UhciGetEndpointStatus;
RegistrationPacket.MINIPORT_SetEndpointDataToggle = UhciSetEndpointDataToggle;
RegistrationPacket.MINIPORT_OpenEndpoint = UhciOpenEndpoint;
RegistrationPacket.MINIPORT_PokeEndpoint = UhciPokeEndpoint;
RegistrationPacket.MINIPORT_QueryEndpointRequirements = UhciQueryEndpointRequirements;
RegistrationPacket.MINIPORT_CloseEndpoint = UhciCloseEndpoint;
RegistrationPacket.MINIPORT_PollEndpoint = UhciPollEndpoint;
RegistrationPacket.MINIPORT_SetEndpointState = UhciSetEndpointState;
RegistrationPacket.MINIPORT_GetEndpointState = UhciGetEndpointState;
RegistrationPacket.MINIPORT_Get32BitFrameNumber = UhciGet32BitFrameNumber;
RegistrationPacket.MINIPORT_PollController = UhciPollController;
RegistrationPacket.MINIPORT_CheckController = UhciCheckController;
RegistrationPacket.MINIPORT_InterruptNextSOF = UhciInterruptNextSOF;
RegistrationPacket.MINIPORT_SubmitTransfer = UhciSubmitTransfer;
RegistrationPacket.MINIPORT_SubmitIsoTransfer = UhciIsochTransfer;
RegistrationPacket.MINIPORT_AbortTransfer = UhciAbortTransfer;
RegistrationPacket.MINIPORT_StartSendOnePacket = UhciStartSendOnePacket;
RegistrationPacket.MINIPORT_EndSendOnePacket = UhciEndSendOnePacket;
RegistrationPacket.MINIPORT_PassThru = UhciPassThru;
RegistrationPacket.MINIPORT_FlushInterrupts = UhciFlushInterrupts;
RegistrationPacket.OptionFlags = USB_MINIPORT_OPT_NEED_IRQ |
USB_MINIPORT_OPT_NEED_IOPORT |
USB_MINIPORT_OPT_NO_IRQ_SYNC |
//USB_MINIPORT_OPT_POLL_IN_SUSPEND |
USB_MINIPORT_OPT_POLL_CONTROLLER;
//
// UHCI controller
//
RegistrationPacket.HciType = USB_UHCI;
RegistrationPacket.BusBandwidth = USB_11_BUS_BANDWIDTH;
DriverObject->DriverUnload = NULL;
return USBPORT_RegisterUSBPortDriver(
DriverObject,
USB_MINIPORT_HCI_VERSION,
&RegistrationPacket);
}