mirror of https://github.com/tongzx/nt5src
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.
110 lines
2.7 KiB
110 lines
2.7 KiB
/*++
|
|
|
|
Copyright (c) 1998-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
pipelinep.h
|
|
|
|
Abstract:
|
|
|
|
This module contains private declarations for the pipeline package.
|
|
These are kept in a separate file to make them accessible by the
|
|
ULKD kernel debuggger extension.
|
|
|
|
Author:
|
|
|
|
Keith Moore (keithmo) 10-Jun-1998
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _PIPELINEP_H_
|
|
#define _PIPELINEP_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
//
|
|
// Per-thread data we keep for the pipeline worker threads.
|
|
//
|
|
|
|
typedef struct _UL_PIPELINE_THREAD_DATA
|
|
{
|
|
HANDLE ThreadHandle;
|
|
PVOID pThreadObject;
|
|
|
|
#if DBG
|
|
ULONG QueuesHandled;
|
|
ULONG WorkItemsHandled;
|
|
#endif
|
|
|
|
} UL_PIPELINE_THREAD_DATA, *PUL_PIPELINE_THREAD_DATA;
|
|
|
|
|
|
//
|
|
// The UL_PIPELINE_RARE structure contains rarely used data. The data
|
|
// in this structure is typically accessed only during pipeline creation
|
|
// and termination. This structure located immediately after the
|
|
// UL_PIPELINE data.
|
|
//
|
|
|
|
typedef struct _UL_PIPELINE_RARE
|
|
{
|
|
//
|
|
// The UL_PIPELINE structure is carefully aligned on a cache-line
|
|
// boundary. To do this, we allocate a block of memory slightly
|
|
// larger than necessary and round up to the next cache-line.
|
|
// Therefore, the block of memory allocated is not necessarily the
|
|
// one actually used. The following field points to the actual
|
|
// block of allocated memory.
|
|
//
|
|
|
|
PVOID pAllocationBlock;
|
|
|
|
//
|
|
// Per-thread data for the worker threads goes here. The number of
|
|
// items in this array is:
|
|
//
|
|
// ( ThreadsPerCpu * UlNumberOfProcessors )
|
|
//
|
|
// UL_PIPELINE_THREAD_DATA ThreadData[ANYSIZE_ARRAY];
|
|
//
|
|
|
|
} UL_PIPELINE_RARE, *PUL_PIPELINE_RARE;
|
|
|
|
|
|
//
|
|
// Macro for calculating the memory size required for a pipeline given
|
|
// the number of queues and the number of worker threads.
|
|
//
|
|
|
|
#define PIPELINE_LENGTH( queues, threads ) \
|
|
( sizeof(UL_PIPELINE) \
|
|
- sizeof(UL_PIPELINE_QUEUE) \
|
|
+ sizeof(UL_PIPELINE_RARE) \
|
|
+ ( (ULONG)(queues) * sizeof(UL_PIPELINE_QUEUE) ) \
|
|
+ ( (ULONG)(threads) * sizeof(UL_PIPELINE_THREAD_DATA) ) )
|
|
|
|
|
|
//
|
|
// Macros for mapping a UL_PIPELINE pointer to the corresponding
|
|
// UL_PIPELINE_RARE and UL_PIPELINE_THREAD_DATA structures.
|
|
//
|
|
|
|
#define PIPELINE_TO_RARE_DATA( pipeline ) \
|
|
( (PUL_PIPELINE_RARE)( &(pipeline)->Queues[(pipeline)->QueueCount] ) )
|
|
|
|
#define PIPELINE_TO_THREAD_DATA( pipeline ) \
|
|
(PUL_PIPELINE_THREAD_DATA)( PIPELINE_TO_RARE_DATA( pipeline ) + 1 )
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}; // extern "C"
|
|
#endif
|
|
|
|
#endif // _PIPELINEP_H_
|