Leaked source code of windows server 2003
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.
 
 
 
 
 
 

144 lines
3.7 KiB

/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
atkind.h
Abstract:
Author:
Nikhil Kamkolkar ([email protected])
Revision History:
22 Oct 1993 Initial Version
Notes: Tab stop: 4
--*/
#ifndef _ATKIND_
#define _ATKIND_
// Different subtypes for ATP indication type.
#define ATP_ALLOC_BUF 0
#define ATP_USER_BUF 1
#define ATP_USER_BUFX 2 // Do not indicate the packet to Atp with this.
ATALK_ERROR
AtalkIndAtpPkt(
IN PPORT_DESCRIPTOR pPortDesc,
IN PBYTE pLookahead,
IN USHORT PktLen,
IN OUT PUINT pXferOffset,
IN PBYTE pLinkHdr,
IN BOOLEAN ShortDdpHdr,
OUT PBYTE SubType,
OUT PBYTE * ppPacket,
OUT PNDIS_PACKET * pNdisPkt);
ATALK_ERROR
AtalkIndAtpCacheSocket(
IN struct _ATP_ADDROBJ * pAtpAddr,
IN PPORT_DESCRIPTOR pPortDesc);
VOID
AtalkIndAtpUnCacheSocket(
IN struct _ATP_ADDROBJ * pAtpAddr);
// VOID
// AtalkIndAtpSetupNdisBuffer(
// IN OUT PATP_REQ pAtpReq,
// IN ULONG MaxSinglePktSize);
//
#define AtalkIndAtpSetupNdisBuffer(pAtpReq, MaxSinglePktSize) \
{ \
NDIS_STATUS ndisStatus; \
PNDIS_BUFFER ndisBuffer; \
USHORT seqNum = 0; \
USHORT startOffset = 0; \
SHORT BufLen = (SHORT)pAtpReq->req_RespBufLen;\
\
RtlZeroMemory(pAtpReq->req_NdisBuf, \
sizeof(PVOID) * ATP_MAX_RESP_PKTS); \
\
while (BufLen > 0) \
{ \
NdisCopyBuffer(&ndisStatus, \
&ndisBuffer, \
AtalkNdisBufferPoolHandle, \
(PVOID)pAtpReq->req_RespBuf, \
startOffset, \
(UINT)MIN(BufLen, \
(SHORT)MaxSinglePktSize)); \
\
if (ndisStatus != NDIS_STATUS_SUCCESS) \
break; \
\
pAtpReq->req_NdisBuf[seqNum++] = ndisBuffer; \
startOffset += (USHORT)MaxSinglePktSize; \
BufLen -= (SHORT)MaxSinglePktSize; \
} \
}
// VOID
// AtalkIndAtpReleaseNdisBuffer(
// IN OUT PATP_REQ pAtpReq);
//
#define AtalkIndAtpReleaseNdisBuffer(pAtpReq) \
{ \
LONG _i; \
\
for (_i = 0; _i < ATP_MAX_RESP_PKTS; _i++) \
{ \
if ((pAtpReq)->req_NdisBuf[_i] != NULL) \
NdisFreeBuffer((pAtpReq)->req_NdisBuf[_i]); \
} \
}
// ATALK_ERROR
// AtalkIndAtpCacheLkUpSocket(
// IN PATALK_ADDR pDestAddr,
// OUT struct _ATP_ADDROBJ ** ppAtpAddr,
// OUT ATALK_ERROR * pError);
//
#define AtalkIndAtpCacheLkUpSocket(pDestAddr, ppAtpAddr, pError) \
{ \
USHORT i; \
struct ATALK_CACHED_SKT *pCachedSkt; \
\
*(pError) = ATALK_FAILURE; \
\
if (((pDestAddr)->ata_Network == AtalkSktCache.ac_Network) && \
((pDestAddr)->ata_Node == AtalkSktCache.ac_Node)) \
{ \
ACQUIRE_SPIN_LOCK_DPC(&AtalkSktCacheLock); \
\
for (i = 0, pCachedSkt = &AtalkSktCache.ac_Cache[0]; \
i < ATALK_CACHE_SKTMAX; \
i++, pCachedSkt++) \
{ \
if ((pCachedSkt->Type == (ATALK_CACHE_INUSE | ATALK_CACHE_ATPSKT)) && \
(pCachedSkt->Socket == (pDestAddr)->ata_Socket))\
{ \
AtalkAtpAddrReferenceDpc(pCachedSkt->u.pAtpAddr,\
pError); \
\
if (ATALK_SUCCESS(*pError)) \
{ \
*(ppAtpAddr) = pCachedSkt->u.pAtpAddr; \
} \
break; \
} \
} \
\
RELEASE_SPIN_LOCK_DPC(&AtalkSktCacheLock); \
} \
}
#endif