NT4/private/ntos/nthals/halflex/alpha/evxprof.c
2020-09-30 17:12:29 +02:00

343 lines
5.7 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1994 Digital Equipment Corporation
Module Name:
evxprof.c
Abstract:
This module implements the Profile Counter using the performance
counters within the EV5 core. This module is appropriate for all
machines based on microprocessors using the EV5 core.
N.B. - This module assumes that all processors in a multiprocessor
system are running the microprocessor at the same clock speed.
Author:
Michael D. Kinney 14-Aug-1995
Environment:
Kernel mode
Revision History:
--*/
#include "halp.h"
BOOLEAN
Hal21064QueryProfileInterval(
IN KPROFILE_SOURCE Source
);
BOOLEAN
Hal21164QueryProfileInterval(
IN KPROFILE_SOURCE Source
);
NTSTATUS
Hal21064SetProfileSourceInterval(
IN KPROFILE_SOURCE ProfileSource,
IN OUT ULONG *Interval
);
NTSTATUS
Hal21164SetProfileSourceInterval(
IN KPROFILE_SOURCE ProfileSource,
IN OUT ULONG *Interval
);
ULONG
Hal21064SetProfileInterval (
IN ULONG Interval
);
ULONG
Hal21164SetProfileInterval (
IN ULONG Interval
);
VOID
Hal21064StartProfileInterrupt (
KPROFILE_SOURCE ProfileSource
);
VOID
Hal21164StartProfileInterrupt (
KPROFILE_SOURCE ProfileSource
);
VOID
Hal21064StopProfileInterrupt (
KPROFILE_SOURCE ProfileSource
);
VOID
Hal21164StopProfileInterrupt (
KPROFILE_SOURCE ProfileSource
);
BOOLEAN
HalQueryProfileInterval(
IN KPROFILE_SOURCE Source
)
/*++
Routine Description:
Given a profile source, returns whether or not that source is
supported.
Arguments:
Source - Supplies the profile source
Return Value:
TRUE - Profile source is supported
FALSE - Profile source is not supported
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
return(Hal21164QueryProfileInterval(Source));
} else {
return(Hal21064QueryProfileInterval(Source));
}
}
NTSTATUS
HalSetProfileSourceInterval(
IN KPROFILE_SOURCE ProfileSource,
IN OUT ULONG *Interval
)
/*++
Routine Description:
Sets the profile interval for a specified profile source
Arguments:
ProfileSource - Supplies the profile source
Interval - Supplies the specified profile interval
Returns the actual profile interval
Return Value:
NTSTATUS
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
return(Hal21164SetProfileSourceInterval(ProfileSource,Interval));
} else {
return(Hal21064SetProfileSourceInterval(ProfileSource,Interval));
}
}
ULONG
HalSetProfileInterval (
IN ULONG Interval
)
/*++
Routine Description:
This routine sets the profile interrupt interval.
Arguments:
Interval - Supplies the desired profile interval in 100ns units.
Return Value:
The actual profile interval.
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
return(Hal21164SetProfileInterval(Interval));
} else {
return(Hal21064SetProfileInterval(Interval));
}
}
VOID
HalStartProfileInterrupt (
KPROFILE_SOURCE ProfileSource
)
/*++
Routine Description:
This routine turns on the profile interrupt.
N.B. This routine must be called at PROCLK_LEVEL while holding the
profile lock.
Arguments:
None.
Return Value:
None.
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
Hal21164StartProfileInterrupt(ProfileSource);
} else {
Hal21064StartProfileInterrupt(ProfileSource);
}
}
VOID
HalStopProfileInterrupt (
KPROFILE_SOURCE ProfileSource
)
/*++
Routine Description:
This routine turns off the profile interrupt.
N.B. This routine must be called at PROCLK_LEVEL while holding the
profile lock.
Arguments:
None.
Return Value:
None.
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
Hal21164StopProfileInterrupt(ProfileSource);
} else {
Hal21064StopProfileInterrupt(ProfileSource);
}
}
VOID
HalpInitializeProfiler(
VOID
)
/*++
Routine Description:
This routine is called during initialization to initialize profiling
for each processor in the system.
Arguments:
None.
Return Value:
None.
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
Halp21164InitializeProfiler();
} else {
Halp21064InitializeProfiler();
}
}
NTSTATUS
HalpProfileSourceInformation (
OUT PVOID Buffer,
IN ULONG BufferLength,
OUT PULONG ReturnedLength
)
/*++
Routine Description:
Returns the HAL_PROFILE_SOURCE_INFORMATION for this processor.
Arguments:
Buffer - output buffer
BufferLength - length of buffer on input
ReturnedLength - The length of data returned
Return Value:
STATUS_SUCCESS
STATUS_BUFFER_TOO_SMALL - The ReturnedLength contains the buffersize
currently needed.
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
return(Halp21164ProfileSourceInformation(Buffer,BufferLength,ReturnedLength));
} else {
return(Halp21064ProfileSourceInformation(Buffer,BufferLength,ReturnedLength));
}
}
NTSTATUS
HalpProfileSourceInterval (
OUT PVOID Buffer,
IN ULONG BufferLength
)
/*++
Routine Description:
Returns the HAL_PROFILE_SOURCE_INTERVAL for this processor.
Arguments:
Buffer - output buffer
BufferLength - length of buffer on input
Return Value:
STATUS_SUCCESS
STATUS_BUFFER_TOO_SMALL - The ReturnedLength contains the buffersize
currently needed.
--*/
{
if (HalpIoArchitectureType == EV5_PROCESSOR_MODULE) {
return(Halp21164ProfileSourceInterval(Buffer,BufferLength));
} else {
return(Halp21064ProfileSourceInterval(Buffer,BufferLength));
}
}