/* ----------------------------------------------- Device open/close ----------------------------------------------- */ WDC_DEVICE_HANDLE EDEN_DeviceOpen(const WD_PCI_CARD_INFO *pDeviceInfo) { DWORD dwStatus; PEDEN_DEV_CTX pDevCtx = NULL; WDC_DEVICE_HANDLE hDev = NULL; EDEN_DEV_ADDR_DESC devAddrDesc; PWDC_DEVICE pDev; /* Validate arguments */ if (!pDeviceInfo) { ErrLog("EDEN_DeviceOpen: Error - NULL device information struct pointer\n"); return NULL; } /* Allocate memory for the EDEN device context */ pDevCtx = (PEDEN_DEV_CTX)malloc(sizeof (EDEN_DEV_CTX)); if (!pDevCtx) { ErrLog("Failed allocating memory for EDEN device context\n"); return NULL; } BZERO(*pDevCtx); /* Open a WDC device handle */ dwStatus = WDC_PciDeviceOpen(&hDev, pDeviceInfo, pDevCtx, NULL, NULL, NULL); if (WD_STATUS_SUCCESS != dwStatus) { ErrLog("Failed opening a WDC device handle. Error 0x%lx - %s\n", dwStatus, Stat2Str(dwStatus)); goto Error; } pDev = hDev; devAddrDesc.dwNumAddrSpaces = pDev->dwNumAddrSpaces; devAddrDesc.pAddrDesc = pDev->pAddrDesc; /* Open a handle to a Kernel PlugIn driver */ WDC_KernelPlugInOpen(hDev, KP_EDEN_DRIVER_NAME, &devAddrDesc); /* Validate device information */ if (!DeviceValidate((PWDC_DEVICE)hDev)) goto Error; /* Return handle to the new device */ TraceLog("EDEN_DeviceOpen: Opened a EDEN device (handle 0x%p)\n" "Device uses a Kernel PlugIn driver (%s)\n", hDev, KP_EDEN_DRIVER_NAME); return hDev; Error: if (hDev) EDEN_DeviceClose(hDev); else free(pDevCtx); return NULL; }
/* ----------------------------------------------- Device open/close ----------------------------------------------- */ WDC_DEVICE_HANDLE PCIE_SW_DeviceOpen(const WD_PCI_CARD_INFO *pDeviceInfo) { DWORD dwStatus; PPCIE_SW_DEV_CTX pDevCtx = NULL; WDC_DEVICE_HANDLE hDev = NULL; /* Validate arguments */ if (!pDeviceInfo) { ErrLog("PCIE_SW_DeviceOpen: Error - NULL device information struct pointer\n"); return NULL; } /* Allocate memory for the PCIE_SW device context */ pDevCtx = (PPCIE_SW_DEV_CTX)malloc(sizeof (PCIE_SW_DEV_CTX)); if (!pDevCtx) { ErrLog("Failed allocating memory for PCIE_SW device context\n"); return NULL; } BZERO(*pDevCtx); /* Open a WDC device handle */ dwStatus = WDC_PciDeviceOpen(&hDev, pDeviceInfo, pDevCtx, NULL, NULL, NULL); if (WD_STATUS_SUCCESS != dwStatus) { ErrLog("Failed opening a WDC device handle. Error 0x%lx - %s\n", dwStatus, Stat2Str(dwStatus)); goto Error; } /* Validate device information */ if (!DeviceValidate((PWDC_DEVICE)hDev)) goto Error; /* Return handle to the new device */ TraceLog("PCIE_SW_DeviceOpen: Opened a PCIE_SW device (handle 0x%p)\n", hDev); return hDev; Error: if (hDev) PCIE_SW_DeviceClose(hDev); else free(pDevCtx); return NULL; }