📄 request.c
字号:
break;
}
}
return(NDIS_STATUS_SUCCESS);
break;
case OID_GEN_CO_SUPPORTED_GUIDS:
//
// Point to the list of supported guids.
//
DataToMove = (PUCHAR)gTbAtm155GuidListSupported;
DataLength = sizeof(gTbAtm155GuidListSupported);
break;
// tboid++
case OID_TBATM_READ_PEEPHOLE:
//
// Vendor Specific OID, Peep-hole read
//
DataLength = sizeof(TB_PEEPHOLE);
if (pRequest->DATA.QUERY_INFORMATION.InformationBufferLength < DataLength)
{
pRequest->DATA.QUERY_INFORMATION.BytesNeeded = DataLength;
Status = NDIS_STATUS_INVALID_LENGTH;
break;
}
pPeepholePara = pRequest->DATA.QUERY_INFORMATION.InformationBuffer;
if ((pPeepholePara->access_device & 0x01) == 0x01)
{
//
// Peripheral, access devices via peep-hole
//
if (pPeepholePara->address <= 0x3ffff)
{
TBATM155_PH_READ_DEV( pAdapter,
pPeepholePara->address,
&pPeepholePara->data,
&Status);
}
else
{
Status = NDIS_STATUS_FAILURE;
}
}
else
{
//
// SRAM, access SRAM via peep-hole
//
if (pPeepholePara->address <= 0xffff)
{
TBATM155_PH_READ_SRAM(
pAdapter,
pPeepholePara->address,
&pPeepholePara->data,
&Status);
}
else
{
Status = NDIS_STATUS_FAILURE;
}
}
if (NDIS_STATUS_SUCCESS == Status)
{
pPeepholePara->status = 1;
pRequest->DATA.QUERY_INFORMATION.BytesWritten = DataLength;
}
else
{
pPeepholePara->status = 0;
}
return(Status);
case OID_TBATM_READ_CSR:
//
// Vendor Specific OID, CSR read
//
DataLength = sizeof(TB_CSR);
if (pRequest->DATA.QUERY_INFORMATION.InformationBufferLength < DataLength)
{
pRequest->DATA.QUERY_INFORMATION.BytesNeeded = DataLength;
Status = NDIS_STATUS_INVALID_LENGTH;
break;
}
pCsrPara = pRequest->DATA.QUERY_INFORMATION.InformationBuffer;
if (pCsrPara->address <= 0x36)
{
//
// access CSR
//
CsrVirtualAddr = (PUCHAR)pHwInfo->TbAtm155_SAR + (pCsrPara->address << 2);
TBATM155_READ_PORT(CsrVirtualAddr, &pCsrPara->data);
pCsrPara->status = 1;
pRequest->DATA.QUERY_INFORMATION.BytesWritten = DataLength;
}
else
{
Status = NDIS_STATUS_FAILURE;
pCsrPara->status = 0;
}
return(Status);
// tboid--
case OID_VENDOR_STRING:
DataToMove = (PUCHAR)gTbAtm155DriverDescription;
DataLength = sizeof(gTbAtm155DriverDescription);
break;
default:
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("tbAtm155QueryInformation: Invalid Query Information\n"));
Status = NDIS_STATUS_NOT_SUPPORTED;
break;
}
//
// Copy the data to the buffer provided if necessary.
//
if (NDIS_STATUS_SUCCESS == Status)
{
if (pRequest->DATA.QUERY_INFORMATION.InformationBufferLength < DataLength)
{
pRequest->DATA.QUERY_INFORMATION.BytesNeeded = DataLength;
Status = NDIS_STATUS_INVALID_LENGTH;
}
else
{
NdisMoveMemory(
pRequest->DATA.QUERY_INFORMATION.InformationBuffer,
DataToMove,
DataLength);
pRequest->DATA.QUERY_INFORMATION.BytesWritten = DataLength;
}
}
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("<==tbAtm155QueryInformation (Status: 0x%lx)\n", Status));
return(Status);
}
NDIS_STATUS
tbAtm155SetInformation(
IN PADAPTER_BLOCK pAdapter,
IN PVC_BLOCK pVc,
IN OUT PNDIS_REQUEST pRequest
)
/*++
Routine Description:
This routine will process any set requests.
Arguments:
pAdapter - Pointer to the ADAPTER_BLOCK.
pVc - Pointer to the VC_BLOCK.
pRequest - Pointer to the NDIS_REQUEST that identifies the request.
Return Value:
NDIS_STATUS_NOT_SUPPORTED if we don't understand the request.
--*/
{
// tboid
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("==>tbAtm155SetInformation\n"));
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
(" pAdapter: 0x%x\n pVc: 0x%x\n pRequest: 0x%x\n OID: 0x%x\n",
pAdapter, pVc, pRequest, pRequest->DATA.SET_INFORMATION.Oid));
// tboid++
switch (pRequest->DATA.SET_INFORMATION.Oid)
{
// tboid--
default:
UNREFERENCED_PARAMETER(pAdapter);
UNREFERENCED_PARAMETER(pVc);
UNREFERENCED_PARAMETER(pRequest);
Status = NDIS_STATUS_NOT_SUPPORTED;
}
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("<==tbAtm155SetInformation\n"));
return (Status);
}
NDIS_STATUS
tbAtm155QueryStatistics(
IN PADAPTER_BLOCK pAdapter,
IN PVC_BLOCK pVc,
IN OUT PNDIS_REQUEST pRequest
)
/*++
Routine Description:
Arguments:
Return Value:
--*/
{
NDIS_STATUS Status;
PULONG DataToMove;
ULONG Data;
ULONG DataLength;
PTBATM155_STATISTICS_INFO pStatInfo;
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("==>tbAtm155QueryStatistics\n"));
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_ERR,
("tbAtm155QueryStatistics:\n pAdapter - 0x%x\n pVc - 0x%x\n pRequest - 0x%x\n OID - 0x%x\n",
pAdapter, pVc, pRequest, pRequest->DATA.QUERY_INFORMATION.Oid));
//
// First see if the OID is handled by the QueryInformation handler.
//
Status = tbAtm155QueryInformation(pAdapter, pVc, pRequest);
if ((NDIS_STATUS_SUCCESS == Status) ||
(NDIS_STATUS_PENDING == Status) ||
(NDIS_STATUS_INVALID_LENGTH == Status))
{
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("tbAtm155QueryStatistics: Request handled by tbAtm155QueryInformation\n"));
//
// We are done.
//
return(Status);
}
//
// Default the status to success for below.
//
Status = NDIS_STATUS_SUCCESS;
//
// Default length.
//
DataToMove = &Data;
DataLength = sizeof(ULONG);
//
// The switch statement below will copy the statistic counter
// to the buffer so that it can finally be copied into the
// InformationBuffer. If the VC_BLOCK passed in is NULL then the
// query is for global information.
//
pStatInfo = (NULL == pVc) ? &pAdapter->StatInfo : &pVc->StatInfo;
switch (pRequest->DATA.QUERY_INFORMATION.Oid)
{
case OID_GEN_CO_XMIT_PDUS_OK:
Data = pStatInfo->XmitPdusOk;
break;
case OID_GEN_CO_XMIT_PDUS_ERROR:
Data = pStatInfo->XmitPdusError;
break;
case OID_GEN_CO_RCV_PDUS_OK:
Data = pStatInfo->RecvPdusOk;
break;
case OID_GEN_CO_RCV_PDUS_ERROR:
Data = pStatInfo->RecvPdusError;
break;
case OID_GEN_CO_RCV_PDUS_NO_BUFFER:
Data = pStatInfo->RecvPdusNoBuffer;
break;
case OID_GEN_CO_RCV_CRC_ERROR:
Data = pStatInfo->RecvCrcError;
break;
case OID_ATM_RCV_CELLS_OK:
Data = pStatInfo->RecvCellsOk;
break;
case OID_ATM_XMIT_CELLS_OK:
Data = pStatInfo->XmitCellsOk;
break;
case OID_ATM_RCV_CELLS_DROPPED:
Data = pStatInfo->RecvCellsDropped;
break;
case OID_ATM_RCV_INVALID_VPI_VCI:
Data = pStatInfo->RecvInvalidVpiVci;
break;
case OID_ATM_RCV_REASSEMBLY_ERROR:
DataToMove = &pStatInfo->RecvReassemblyErr;
break;
default:
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_ERR,
("tbAtm155QueryStatistics: Invalid Query Statistics\n"));
Status = NDIS_STATUS_NOT_SUPPORTED;
break;
}
//
// Copy the data to the buffer provided if necessary.
//
if (NDIS_STATUS_SUCCESS == Status)
{
if (pRequest->DATA.QUERY_INFORMATION.InformationBufferLength < DataLength)
{
pRequest->DATA.QUERY_INFORMATION.BytesNeeded = DataLength;
Status = NDIS_STATUS_INVALID_LENGTH;
}
else
{
NdisMoveMemory(
pRequest->DATA.QUERY_INFORMATION.InformationBuffer,
DataToMove,
DataLength);
pRequest->DATA.QUERY_INFORMATION.BytesWritten = DataLength;
}
}
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("tbAtm155QueryStatistics returning: 0x%lx\n", Status));
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("<==tbAtm155QueryStatistics\n"));
return(Status);
}
NDIS_STATUS
TbAtm155Request(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE MiniportVcContext OPTIONAL,
IN OUT PNDIS_REQUEST NdisCoRequest
)
{
PADAPTER_BLOCK pAdapter = (PADAPTER_BLOCK)MiniportAdapterContext;
PVC_BLOCK pVc = (PVC_BLOCK)MiniportVcContext;
NDIS_STATUS Status = NDIS_STATUS_FAILURE;
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("==>TbAtm155Request\n"));
switch (NdisCoRequest->RequestType)
{
case NdisRequestQueryInformation:
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("TbAtm155Request: NdisRequestQueryInformation\n"));
Status = tbAtm155QueryInformation(pAdapter, pVc, NdisCoRequest);
break;
case NdisRequestSetInformation:
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("TbAtm155Request: NdisRequestSetInformation\n"));
Status = tbAtm155SetInformation(pAdapter, pVc, NdisCoRequest);
break;
case NdisRequestQueryStatistics:
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("TbAtm155Request: NdisRequestQueryStatistics\n"));
Status = tbAtm155QueryStatistics(pAdapter, pVc, NdisCoRequest);
break;
}
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("TbAtm155Request: Return status - 0x%x\n", Status));
DBGPRINT(DBG_COMP_REQUEST, DBG_LEVEL_INFO,
("<==TbAtm155Request\n"));
return(Status);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -