diff options
Diffstat (limited to 'drkaiser.c')
-rw-r--r-- | drkaiser.c | 23 |
1 files changed, 14 insertions, 9 deletions
@@ -27,6 +27,8 @@ #define PCI_MAGIC_DRKAISER_ADDR 0x50 #define PCI_MAGIC_DRKAISER_VALUE 0xa971 +#define DRKAISER_MEMMAP_SIZE (1024 * 128) + /* Mask to restrict flash accesses to the 128kB memory window. */ #define DRKAISER_MEMMAP_MASK ((1 << 17) - 1) @@ -37,6 +39,15 @@ const struct pcidev_status drkaiser_pcidev[] = { static uint8_t *drkaiser_bar; +static int drkaiser_shutdown(void *data) +{ + physunmap(drkaiser_bar, DRKAISER_MEMMAP_SIZE); + /* Flash write is disabled automatically by PCI restore. */ + pci_cleanup(pacc); + release_io_perms(); + return 0; +}; + int drkaiser_init(void) { uint32_t addr; @@ -51,21 +62,15 @@ int drkaiser_init(void) /* Map 128kB flash memory window. */ drkaiser_bar = physmap("Dr. Kaiser PC-Waechter flash memory", - addr, 128 * 1024); + addr, DRKAISER_MEMMAP_SIZE); buses_supported = CHIP_BUSTYPE_PARALLEL; + if (register_shutdown(drkaiser_shutdown, NULL)) + return 1; return 0; } -int drkaiser_shutdown(void) -{ - /* Flash write is disabled automatically by PCI restore. */ - pci_cleanup(pacc); - release_io_perms(); - return 0; -}; - void drkaiser_chip_writeb(uint8_t val, chipaddr addr) { pci_mmio_writeb(val, drkaiser_bar + (addr & DRKAISER_MEMMAP_MASK)); |