|
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
atkind.h
Abstract:
Author:
Nikhil Kamkolkar (nikhilk@microsoft.com)
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
|