示例#1
0
/**
 * Enable bus-mastering for the device. See PR #1303185.
 *
 * @param [in] PCI Device instance
 */
static VMK_ReturnStatus
PciSetMaster(vmk_PCIDevice dev)
{
   vmk_uint32 pciCmd;
   VMK_ReturnStatus vmkStatus;
   vmkStatus = vmk_PCIReadConfig(vmk_ModuleCurrentID, dev,
                                 VMK_PCI_CONFIG_ACCESS_16,
                                 NVME_PCI_CMDREG_OFFSET, &pciCmd);

   if (vmkStatus != VMK_OK) {
       EPRINT("Unable to read PCI Command register (%s)",
              vmk_StatusToString(vmkStatus));
       return vmkStatus;
    }

   pciCmd |= NVME_PCI_CMD_BUSMASTER;

   vmkStatus = vmk_PCIWriteConfig(vmk_ModuleCurrentID, dev,
                                  VMK_PCI_CONFIG_ACCESS_16,
                                  NVME_PCI_CMDREG_OFFSET, pciCmd);

   if (vmkStatus != VMK_OK) {
      EPRINT("Unable to write PCI Command register (%s)",
             vmk_StatusToString(vmkStatus));
      return vmkStatus;
   }

   IPRINT("Enabled bus-mastering on device.");
   return vmkStatus;
}
int
vmk_early_init_module(void)
{
   VMK_ReturnStatus vmk_status;

   vmk_status = vmk_ModuleRegister(&vmkshim_module_id, VMKAPI_REVISION);
   if (vmk_status != VMK_OK) {
      vmk_WarningMessage("Registration failed (%#x): %s",
                          vmk_status, vmk_StatusToString(vmk_status));
      return vmk_status;
   }

   return 0;
}