📄 dispatch.c
字号:
DebugPrintf_NoInfo(("PLX_IOCTL_VPD_WRITE\n"));
pIoBuffer->ReturnCode =
PlxPciVpdWrite(
pdx,
pIoBuffer->u.MgmtData.offset,
(U32)pIoBuffer->u.MgmtData.value
);
break;
/***********************************
* Serial EEPROM Access Functions
**********************************/
case PLX_IOCTL_EEPROM_PRESENT:
DebugPrintf_NoInfo(("PLX_IOCTL_EEPROM_PRESENT\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxEepromPresent(
pdx,
&(pIoBuffer->u.MgmtData.u.bFlag)
);
}
break;
case PLX_IOCTL_EEPROM_READ_BY_OFFSET:
DebugPrintf_NoInfo(("PLX_IOCTL_EEPROM_READ_BY_OFFSET\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxEepromReadByOffset(
pdx,
pIoBuffer->u.MgmtData.offset,
(U32*)&(pIoBuffer->u.MgmtData.value)
);
}
break;
case PLX_IOCTL_EEPROM_WRITE_BY_OFFSET:
DebugPrintf_NoInfo(("PLX_IOCTL_EEPROM_WRITE_BY_OFFSET\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxEepromWriteByOffset(
pdx,
pIoBuffer->u.MgmtData.offset,
(U32)pIoBuffer->u.MgmtData.value
);
}
break;
/**************************************************
* Mailbox and Doorbell Register Access Functions
**************************************************/
case PLX_IOCTL_MAILBOX_READ:
DebugPrintf_NoInfo(("PLX_IOCTL_MAILBOX_READ\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
pIoBuffer->u.MgmtData.value = (U32)-1;
}
else
{
pIoBuffer->ReturnCode =
PlxRegisterMailboxRead(
pdx,
pIoBuffer->u.MgmtData.offset,
(U32*)&(pIoBuffer->u.MgmtData.value)
);
}
break;
case PLX_IOCTL_MAILBOX_WRITE:
DebugPrintf_NoInfo(("PLX_IOCTL_MAILBOX_WRITE\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxRegisterMailboxWrite(
pdx,
pIoBuffer->u.MgmtData.offset,
(U32)pIoBuffer->u.MgmtData.value
);
}
break;
case PLX_IOCTL_DOORBELL_READ:
DebugPrintf_NoInfo(("PLX_IOCTL_DOORBELL_READ\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
pIoBuffer->u.MgmtData.value = -1;
}
else
{
pIoBuffer->ReturnCode =
PlxRegisterDoorbellRead(
pdx,
(U32*)&(pIoBuffer->u.MgmtData.value)
);
}
break;
case PLX_IOCTL_DOORBELL_WRITE:
DebugPrintf_NoInfo(("PLX_IOCTL_DOORBELL_WRITE\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxRegisterDoorbellWrite(
pdx,
(U32)pIoBuffer->u.MgmtData.value
);
}
break;
/****************************
* Messaging Unit Functions
****************************/
case PLX_IOCTL_MU_INBOUND_PORT_READ:
DebugPrintf_NoInfo(("PLX_IOCTL_MU_INBOUND_PORT_READ\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxMuInboundPortRead(
pdx,
(U32*)&(pIoBuffer->u.MgmtData.value)
);
}
break;
case PLX_IOCTL_MU_INBOUND_PORT_WRITE:
DebugPrintf_NoInfo(("PLX_IOCTL_MU_INBOUND_PORT_WRITE\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxMuInboundPortWrite(
pdx,
(U32)pIoBuffer->u.MgmtData.value
);
}
break;
case PLX_IOCTL_MU_OUTBOUND_PORT_READ:
DebugPrintf_NoInfo(("PLX_IOCTL_MU_OUTBOUND_PORT_READ\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxMuOutboundPortRead(
pdx,
(U32*)&(pIoBuffer->u.MgmtData.value)
);
}
break;
case PLX_IOCTL_MU_OUTBOUND_PORT_WRITE:
DebugPrintf_NoInfo(("PLX_IOCTL_MU_OUTBOUND_PORT_WRITE\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxMuOutboundPortWrite(
pdx,
(U32)pIoBuffer->u.MgmtData.value
);
}
break;
/***********************************
* DMA Management Functions
**********************************/
case PLX_IOCTL_DMA_CONTROL:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_CONTROL\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaControl(
pdx,
pIoBuffer->u.DmaData.channel,
pIoBuffer->u.DmaData.u.command
);
}
break;
case PLX_IOCTL_DMA_STATUS:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_STATUS\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaStatus(
pdx,
pIoBuffer->u.DmaData.channel
);
}
break;
/***********************
* Block DMA Functions
***********************/
case PLX_IOCTL_DMA_BLOCK_CHANNEL_OPEN:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_BLOCK_CHANNEL_OPEN\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaBlockChannelOpen(
pdx,
pIoBuffer->u.DmaData.channel,
&(pIoBuffer->u.DmaData.u.desc),
pStack->FileObject
);
}
break;
case PLX_IOCTL_DMA_BLOCK_TRANSFER:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_BLOCK_TRANSFER\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaBlockTransfer(
pdx,
pIoBuffer->u.DmaData.channel,
&(pIoBuffer->u.DmaData.u.TxParams)
);
}
break;
case PLX_IOCTL_DMA_BLOCK_CHANNEL_CLOSE:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_BLOCK_CHANNEL_CLOSE\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaBlockChannelClose(
pdx,
pIoBuffer->u.DmaData.channel,
TRUE
);
}
break;
/**********************
* SGL DMA Functions
*********************/
case PLX_IOCTL_DMA_SGL_OPEN:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_SGL_OPEN\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaSglChannelOpen(
pdx,
pIoBuffer->u.DmaData.channel,
&(pIoBuffer->u.DmaData.u.desc),
pStack->FileObject
);
}
break;
case PLX_IOCTL_DMA_SGL_TRANSFER:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_SGL_TRANSFER\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaSglTransfer(
pdx,
pIoBuffer->u.DmaData.channel,
&(pIoBuffer->u.DmaData.u.TxParams)
);
}
break;
case PLX_IOCTL_DMA_SGL_CLOSE:
DebugPrintf_NoInfo(("PLX_IOCTL_DMA_SGL_CLOSE\n"));
if (pdx->PowerState > MIN_WORKING_POWER_STATE)
{
pIoBuffer->ReturnCode = ApiPowerDown;
}
else
{
pIoBuffer->ReturnCode =
PlxDmaSglChannelClose(
pdx,
pIoBuffer->u.DmaData.channel,
TRUE
);
}
break;
/*****************************
* Unsupported Messages
****************************/
default:
DebugPrintf_NoInfo((
"Unsupported PLX_IOCTL_Xxx (0x%08x)\n",
pStack->Parameters.DeviceIoControl.IoControlCode
));
pIoBuffer->ReturnCode = ApiUnsupportedFunction;
break;
}
PlxUnlockDevice(
pdx
);
return PlxCompleteIrp(
pIrp,
STATUS_SUCCESS
);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -