#include "harddoomdev.h" #include "harddoom.h" #include "doomcode.h" #include "pci.h" #include "private_data.h" void doomdev_write(void __iomem *iomem, size_t addr, uint32_t data) { iowrite32(data, iomem + addr); } uint32_t doomdev_read(void __iomem *iomem, size_t addr) { return ioread32(iomem + addr); } uint32_t doomdev_read_stat(void __iomem *iomem, size_t stat) { return doomdev_read(iomem, HARDDOOM_STATS(stat)); } void load_microcode(void __iomem *iomem) { int i; doomdev_write(iomem, HARDDOOM_FE_CODE_ADDR, 0); for (i = 0; i < ARRAY_SIZE(doomcode); i++) { doomdev_write(iomem, HARDDOOM_FE_CODE_WINDOW, doomcode[i]); } } void start_dev(struct pci_dev *dev) { struct doom_data *data; void __iomem *iomem; data = pci_get_drvdata(dev); iomem = data->iomem; load_microcode(iomem); doomdev_write(iomem, HARDDOOM_RESET, 0xffffffe); doomdev_write(iomem, HARDDOOM_INTR, 0x3ff); doomdev_write(iomem, HARDDOOM_ENABLE, HARDDOOM_ENABLE_ALL ^ HARDDOOM_ENABLE_FETCH_CMD); } void shutdown_dev(struct pci_dev *dev) { struct doom_data *data; void __iomem *iomem; data = pci_get_drvdata(dev); iomem = data->iomem; doomdev_write(iomem, HARDDOOM_ENABLE, 0); doomdev_write(iomem, HARDDOOM_INTR_ENABLE, 0); doomdev_read(iomem, 0); }