Implement functions required by some ndis drivers.

NdisIMCopySendPerPacketInfo [1]
 KeQuerySystemTime [1]
 KeTickCount [1]
 strncat [1]
 KeBugCheckEx

Submitted by:	Marcin Simonides [1]
This commit is contained in:
Andrew Thompson 2007-12-03 23:43:58 +00:00
parent 7218dd5f5a
commit ac740aebcf
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=174240
2 changed files with 68 additions and 0 deletions

View File

@ -282,6 +282,7 @@ static void NdisCopyFromPacketToPacket(ndis_packet *,
uint32_t, uint32_t, ndis_packet *, uint32_t, uint32_t *);
static void NdisCopyFromPacketToPacketSafe(ndis_packet *,
uint32_t, uint32_t, ndis_packet *, uint32_t, uint32_t *, uint32_t);
static void NdisIMCopySendPerPacketInfo(ndis_packet *, ndis_packet *);
static ndis_status NdisMRegisterDevice(ndis_handle,
unicode_string *, unicode_string *, driver_dispatch **,
void **, ndis_handle *);
@ -3279,6 +3280,14 @@ NdisCopyFromPacketToPacketSafe(dpkt, doff, reqlen, spkt, soff, cpylen, prio)
return;
}
static void
NdisIMCopySendPerPacketInfo(dpkt, spkt)
ndis_packet *dpkt;
ndis_packet *spkt;
{
memcpy(&dpkt->np_ext, &spkt->np_ext, sizeof(ndis_packet_extension));
}
static ndis_status
NdisMRegisterDevice(handle, devname, symname, majorfuncs, devobj, devhandle)
ndis_handle handle;
@ -3356,6 +3365,7 @@ dummy()
image_patch_table ndis_functbl[] = {
IMPORT_SFUNC(NdisCopyFromPacketToPacket, 6),
IMPORT_SFUNC(NdisCopyFromPacketToPacketSafe, 7),
IMPORT_SFUNC(NdisIMCopySendPerPacketInfo, 2),
IMPORT_SFUNC(NdisScheduleWorkItem, 1),
IMPORT_SFUNC(NdisMIndicateStatusComplete, 1),
IMPORT_SFUNC(NdisMIndicateStatus, 4),

View File

@ -218,6 +218,8 @@ static int atoi (const char *);
static long atol (const char *);
static int rand(void);
static void srand(unsigned int);
static void KeQuerySystemTime(uint64_t *);
static uint32_t KeTickCount(void);
static uint8_t IoIsWdmVersionAvailable(uint8_t, uint8_t);
static void ntoskrnl_thrfunc(void *);
static ndis_status PsCreateSystemThread(ndis_handle *,
@ -240,11 +242,13 @@ static void *ntoskrnl_memset(void *, int, size_t);
static void *ntoskrnl_memmove(void *, void *, size_t);
static void *ntoskrnl_memchr(void *, unsigned char, size_t);
static char *ntoskrnl_strstr(char *, char *);
static char *ntoskrnl_strncat(char *, char *, size_t);
static int ntoskrnl_toupper(int);
static int ntoskrnl_tolower(int);
static funcptr ntoskrnl_findwrap(funcptr);
static uint32_t DbgPrint(char *, ...);
static void DbgBreakPoint(void);
static void KeBugCheckEx(uint32_t, u_long, u_long, u_long, u_long);
static void dummy(void);
static struct mtx ntoskrnl_dispatchlock;
@ -475,6 +479,29 @@ ntoskrnl_strstr(s, find)
return ((char *)s);
}
/* Taken from libc */
static char *
ntoskrnl_strncat(dst, src, n)
char *dst;
char *src;
size_t n;
{
if (n != 0) {
char *d = dst;
const char *s = src;
while (*d != 0)
d++;
do {
if ((*d = *s++) == 0)
break;
d++;
} while (--n != 0);
*d = 0;
}
return (dst);
}
static int
ntoskrnl_toupper(c)
int c;
@ -1590,6 +1617,22 @@ ntoskrnl_time(tval)
return;
}
static void
KeQuerySystemTime(current_time)
uint64_t *current_time;
{
ntoskrnl_time(current_time);
}
static uint32_t
KeTickCount(void)
{
struct timeval tv;
getmicrouptime(&tv);
return tvtohz(&tv);
}
/*
* KeWaitForSingleObject() is a tricky beast, because it can be used
* with several different object types: semaphores, timers, events,
@ -3593,6 +3636,17 @@ DbgBreakPoint(void)
#endif
}
static void
KeBugCheckEx(code, param1, param2, param3, param4)
uint32_t code;
u_long param1;
u_long param2;
u_long param3;
u_long param4;
{
panic("KeBugCheckEx: STOP 0x%X", code);
}
static void
ntoskrnl_timercall(arg)
void *arg;
@ -4218,6 +4272,7 @@ image_patch_table ntoskrnl_functbl[] = {
IMPORT_CFUNC_MAP(_vsnprintf, vsnprintf, 0),
IMPORT_CFUNC(DbgPrint, 0),
IMPORT_SFUNC(DbgBreakPoint, 0),
IMPORT_SFUNC(KeBugCheckEx, 5),
IMPORT_CFUNC(strncmp, 0),
IMPORT_CFUNC(strcmp, 0),
IMPORT_CFUNC_MAP(stricmp, strcasecmp, 0),
@ -4227,6 +4282,7 @@ image_patch_table ntoskrnl_functbl[] = {
IMPORT_CFUNC_MAP(toupper, ntoskrnl_toupper, 0),
IMPORT_CFUNC_MAP(tolower, ntoskrnl_tolower, 0),
IMPORT_CFUNC_MAP(strstr, ntoskrnl_strstr, 0),
IMPORT_CFUNC_MAP(strncat, ntoskrnl_strncat, 0),
IMPORT_CFUNC_MAP(strchr, index, 0),
IMPORT_CFUNC_MAP(strrchr, rindex, 0),
IMPORT_CFUNC(memcpy, 0),
@ -4368,6 +4424,8 @@ image_patch_table ntoskrnl_functbl[] = {
IMPORT_SFUNC(IoWMIRegistrationControl, 2),
IMPORT_SFUNC(WmiQueryTraceInformation, 5),
IMPORT_CFUNC(WmiTraceMessage, 0),
IMPORT_SFUNC(KeQuerySystemTime, 1),
IMPORT_CFUNC(KeTickCount, 0),
/*
* This last entry is a catch-all for any function we haven't