137 lines
2.4 KiB
C
137 lines
2.4 KiB
C
|
||
/*++
|
||
|
||
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 (ejstill@o2micro.com)
|
||
//
|
||
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 (ejstill@o2micro.com)
|
||
//
|
||
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;
|
||
}
|
||
|