|
77 | 77 | #define NDEBUG |
78 | 78 | #include <debug.h> |
79 | 79 |
|
80 | | -#define MAX_SG_ELEMENTS 0x10 |
| 80 | +#define MAX_SG_ELEMENTS 0x20 |
81 | 81 |
|
82 | 82 | #ifndef _MINIHAL_ |
83 | 83 | static KEVENT HalpDmaLock; |
@@ -993,13 +993,16 @@ HalpScatterGatherAdapterControl(IN PDEVICE_OBJECT DeviceObject, |
993 | 993 | PSCATTER_GATHER_CONTEXT AdapterControlContext = Context; |
994 | 994 | PADAPTER_OBJECT AdapterObject = AdapterControlContext->AdapterObject; |
995 | 995 | PSCATTER_GATHER_LIST ScatterGatherList; |
996 | | - SCATTER_GATHER_ELEMENT TempElements[MAX_SG_ELEMENTS]; |
| 996 | + PSCATTER_GATHER_ELEMENT TempElements; |
997 | 997 | ULONG ElementCount = 0, RemainingLength = AdapterControlContext->Length; |
998 | 998 | PUCHAR CurrentVa = AdapterControlContext->CurrentVa; |
999 | 999 |
|
1000 | 1000 | /* Store the map register base for later in HalPutScatterGatherList */ |
1001 | 1001 | AdapterControlContext->MapRegisterBase = MapRegisterBase; |
1002 | 1002 |
|
| 1003 | + TempElements = ExAllocatePoolZero(NonPagedPool, sizeof(*TempElements) * MAX_SG_ELEMENTS, TAG_DMA); |
| 1004 | + ASSERT(TempElements); |
| 1005 | + |
1003 | 1006 | while (RemainingLength > 0 && ElementCount < MAX_SG_ELEMENTS) |
1004 | 1007 | { |
1005 | 1008 | TempElements[ElementCount].Length = RemainingLength; |
@@ -1039,6 +1042,8 @@ HalpScatterGatherAdapterControl(IN PDEVICE_OBJECT DeviceObject, |
1039 | 1042 | TempElements, |
1040 | 1043 | sizeof(SCATTER_GATHER_ELEMENT) * ElementCount); |
1041 | 1044 |
|
| 1045 | + ExFreePoolWithTag(TempElements, TAG_DMA); |
| 1046 | + |
1042 | 1047 | DPRINT("Initiating S/G DMA with %d element(s)\n", ElementCount); |
1043 | 1048 |
|
1044 | 1049 | AdapterControlContext->AdapterListControlRoutine(DeviceObject, |
|
0 commit comments