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.
136 lines
2.5 KiB
136 lines
2.5 KiB
|
|
/*++
|
|
|
|
Copyright (c) 1994 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
o2m.c
|
|
|
|
Abstract:
|
|
|
|
This module contains the code that contains
|
|
O2 micro cardbus controller specific initialization and
|
|
other dispatches
|
|
|
|
Author:
|
|
|
|
Ravisankar Pudipeddi (ravisp) 1-Nov-97
|
|
|
|
|
|
Environment:
|
|
|
|
Kernel mode
|
|
|
|
Revision History :
|
|
|
|
|
|
--*/
|
|
|
|
#include "pch.h"
|
|
|
|
|
|
|
|
VOID
|
|
O2MInitialize(
|
|
IN PFDO_EXTENSION FdoExtension
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Initialize O2Micro controllers
|
|
|
|
Arguments:
|
|
|
|
FdoExtension - Pointer to the device extension for the controller FDO
|
|
|
|
Return Value:
|
|
|
|
None
|
|
--*/
|
|
{
|
|
UCHAR byte;
|
|
USHORT word;
|
|
|
|
//
|
|
// patch for o2micro controllers courtesy of Eric Still ([email protected])
|
|
//
|
|
byte = PcicReadSocket(FdoExtension->SocketList, 0x3a) | 0xa0;
|
|
PcicWriteSocket(FdoExtension->SocketList, 0x3a, byte);
|
|
|
|
//
|
|
// initialize IRQ routing to ISA
|
|
//
|
|
|
|
GetPciConfigSpace(FdoExtension, CFGSPACE_BRIDGE_CTRL, &word, 2);
|
|
word |= BCTRL_IRQROUTING_ENABLE;
|
|
SetPciConfigSpace(FdoExtension, CFGSPACE_BRIDGE_CTRL, &word, 2);
|
|
}
|
|
|
|
|
|
NTSTATUS
|
|
O2MSetPower(
|
|
IN PSOCKET Socket,
|
|
IN BOOLEAN Enable,
|
|
OUT PULONG pDelayTime
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Set power to the specified socket.
|
|
|
|
Arguments:
|
|
|
|
SocketPtr - the socket to set
|
|
Enable - TRUE means to set power - FALSE is to turn it off.
|
|
pDelayTime - specifies delay (msec) to occur after the current phase
|
|
|
|
Return Value:
|
|
|
|
STATUS_MORE_PROCESSING_REQUIRED - increment phase, perform delay, recall
|
|
other status values terminate sequence
|
|
|
|
--*/
|
|
|
|
{
|
|
NTSTATUS status;
|
|
|
|
status = CBSetPower(Socket, Enable, pDelayTime);
|
|
|
|
if (NT_SUCCESS(status) & Enable) {
|
|
UCHAR byte;
|
|
|
|
//
|
|
// patch for o2micro controllers courtesy of Eric Still ([email protected])
|
|
//
|
|
byte = PcicReadSocket(Socket, 0x3a) | 0xa0;
|
|
PcicWriteSocket(Socket, 0x3a, byte);
|
|
}
|
|
return status;
|
|
}
|
|
|
|
|
|
BOOLEAN
|
|
O2MSetZV(
|
|
IN PSOCKET Socket,
|
|
IN BOOLEAN Enable
|
|
)
|
|
{
|
|
ULONG oldValue;
|
|
|
|
if (Enable) {
|
|
oldValue = CBReadSocketRegister(Socket, CBREG_O2MICRO_ZVCTRL);
|
|
oldValue |= ZVCTRL_ZV_ENABLE;
|
|
CBWriteSocketRegister(Socket, CBREG_O2MICRO_ZVCTRL, oldValue);
|
|
} else {
|
|
oldValue = CBReadSocketRegister(Socket, CBREG_O2MICRO_ZVCTRL);
|
|
oldValue &= ~ZVCTRL_ZV_ENABLE;
|
|
CBWriteSocketRegister(Socket, CBREG_O2MICRO_ZVCTRL, oldValue);
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|