Something went wrong. Try again.
Reactos
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194/* * This file contains definitions and data structures, common between * NDIS driver and debugger helper unit, processing crash dump with built-in * data provided by the driver. * * Included in NetKVM NDIS kernel driver for Windows. * Included in NetKVMDumpParser application. * * Copyright (c) 2008-2017 Red Hat, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met : * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and / or other materials provided with the distribution. * 3. Neither the names of the copyright holders nor the names of their contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */
#ifndef PARANDIS_DEBUG_DATA_H#define PARANDIS_DEBUG_DATA_H
typedef enum _etagHistoryLogOperation{ hopPowerOff, // common::PowerOff, 1/0 - entry/exit (none, entry, none, none) hopPowerOn, // common::PowerOn, 1/0 - entry/exit (none, entry, none, none) hopSysPause, // ndis6::Pause, 1/0 - entry/completion hopSysResume, // ndis6::Restart, 1/0 - entry/completion hopInternalSendPause, // implementation, 1/0 - entry/completion hopInternalReceivePause, // implementation, 1/0 - entry/completion hopInternalSendResume, // implementation hopInternalReceiveResume, // implementation hopSysReset, // implementation driver, 1/0 - entry/completion hopHalt, // implementation driver, 1/0 - entry/completion hopConnectIndication, // implementation hopDPC, // common::DpcWorkBody (1, none, none, none) (0, left, free buffers, free desc) hopSend, // implementation, when Send requested (nbl, nof lists, nof bufs, nof bytes) (packet, 1, nof packets, none) hopSendNBLRequest, // ndis6 implementation (nbl, nof packets, none, none) hopSendPacketRequest, // not used hopSendPacketMapped, // implementation, before the packet inserted into queue (nbl, which packet, nof frags, none) hopSubmittedPacket, // implementation, when the packet submitted (nbl, which packet, result, flags) hopBufferSent, // implementation, when the packet returned from VirtIO queue (nbl, packet no., free buf, free desc) hopReceiveStat, // common: RX (none, retrieved, reported, ready rx buffers) hopBufferReturned, // not used hopSendComplete, // implementation, when the packet completed hopTxProcess, hopPacketReceived, // implementation, when the packet prepared for indication (nbl, length, prio tag, type) hopOidRequest, // implementation, none, OID, on entry(type, 1), on exit (status, 0), on complete (status, 2) hopPnpEvent // common, none, event, 0, 0}eHistoryLogOperation;
// {E51FCE18-B3E7-441e-B18C-D9E9B71616F3}static const GUID ParaNdis_CrashGuid ={ 0xe51fce18, 0xb3e7, 0x441e, { 0xb1, 0x8c, 0xd9, 0xe9, 0xb7, 0x16, 0x16, 0xf3 } };
/* This structure is NOT changeable */typedef struct _tagBugCheckStaticDataHeader{ USHORT SizeOfPointer; USHORT StaticDataVersion; USHORT PerNicDataVersion; USHORT ulMaxContexts; LARGE_INTEGER qCrashTime; UINT64 PerNicData; UINT64 DataArea; UINT64 DataAreaSize;}tBugCheckStaticDataHeader;
/* This structure is NOT changeable */typedef struct _tagBugCheckDataLocation{ UINT64 Address; UINT64 Size;}tBugCheckDataLocation;
#define PARANDIS_DEBUG_STATIC_DATA_VERSION 0#define PARANDIS_DEBUG_PER_NIC_DATA_VERSION 0#define PARANDIS_DEBUG_HISTORY_DATA_VERSION 1/* This structure is NOT changeable */typedef struct _tagBugCheckStaticDataContent_V0{ ULONG SizeOfHistory; ULONG SizeOfHistoryEntry; LONG CurrentHistoryIndex; ULONG HistoryDataVersion; ULONG64 HistoryData;}tBugCheckStaticDataContent_V0;
#define PARANDIS_DEBUG_INTERRUPTS
#ifdef PARANDIS_DEBUG_INTERRUPTS# define PARANDIS_STORE_LAST_INTERRUPT_TIMESTAMP(p) \ NdisGetCurrentSystemTime(&(p)->LastInterruptTimeStamp)# define PARANDIS_GET_LAST_INTERRUPT_TIMESTAMP(p) \ (p)->LastInterruptTimeStamp.QuadPart#else# define PARANDIS_STORE_LAST_INTERRUPT_TIMESTAMP(p)# define PARANDIS_GET_LAST_INTERRUPT_TIMESTAMP(p) (0)#endif
typedef struct _tagBugCheckPerNicDataContent_V0{ UINT64 Context; LARGE_INTEGER LastInterruptTimeStamp; LARGE_INTEGER LastTxCompletionTimeStamp; ULONG nofPacketsToComplete; ULONG nofReadyTxBuffers;}tBugCheckPerNicDataContent_V0;
typedef struct _tagBugCheckHistoryDataEntry_V0{ LARGE_INTEGER TimeStamp; UINT64 Context; UINT64 pParam1; ULONG operation; ULONG lParam2; ULONG lParam3; ULONG lParam4;}tBugCheckHistoryDataEntry_V0;
typedef struct _tagBugCheckHistoryDataEntry_V1{ LARGE_INTEGER TimeStamp; UINT64 Context; ULONG uIRQL; ULONG uProcessor; UINT64 pParam1; ULONG operation; ULONG lParam2; ULONG lParam3; ULONG lParam4;}tBugCheckHistoryDataEntry_V1;
#if (PARANDIS_DEBUG_STATIC_DATA_VERSION == 0)typedef tBugCheckStaticDataContent_V0 tBugCheckStaticDataContent;#endif
#if (PARANDIS_DEBUG_PER_NIC_DATA_VERSION == 0)typedef tBugCheckPerNicDataContent_V0 tBugCheckPerNicDataContent;#endif
#if (PARANDIS_DEBUG_HISTORY_DATA_VERSION == 0)typedef tBugCheckHistoryDataEntry_V0 tBugCheckHistoryDataEntry;#elif (PARANDIS_DEBUG_HISTORY_DATA_VERSION == 1)typedef tBugCheckHistoryDataEntry_V1 tBugCheckHistoryDataEntry;#endif
typedef struct _tagBugCheckStaticDataContent_V1{ UINT64 res1; UINT64 res2; UINT64 History;}tBugCheckStaticDataContent_V1;
typedef struct _tagBugCheckPerNicDataContent_V1{ UINT64 Context; LARGE_INTEGER LastInterruptTimeStamp; LARGE_INTEGER LastTxCompletionTimeStamp; ULONG nofPacketsToComplete; ULONG nofReadyTxBuffers;}tBugCheckPerNicDataContent_V1;
#if (PARANDIS_DEBUG_HEADER_VERSION == 1)typedef tBugCheckStaticDataContent_V1 tBugCheckStaticDataContent;#endif
#if (PARANDIS_DEBUG_PER_NIC_DATA_VERSION == 1)typedef tBugCheckPerNicDataContent_V1 tBugCheckPerNicDataContent;#endif
// etc
#endif