| /* |
| * Nuvoton NPCM7xx Flash Interface Unit (FIU) |
| * |
| * Copyright 2020 Google LLC |
| * |
| * This program is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License as published by the |
| * Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * for more details. |
| */ |
| #ifndef NPCM7XX_FIU_H |
| #define NPCM7XX_FIU_H |
| |
| #include "hw/ssi/ssi.h" |
| #include "hw/sysbus.h" |
| |
| /* |
| * Number of registers in our device state structure. Don't change this without |
| * incrementing the version_id in the vmstate. |
| */ |
| #define NPCM7XX_FIU_NR_REGS (0x7c / sizeof(uint32_t)) |
| |
| typedef struct NPCM7xxFIUState NPCM7xxFIUState; |
| |
| /** |
| * struct NPCM7xxFIUFlash - Per-chipselect flash controller state. |
| * @direct_access: Memory region for direct flash access. |
| * @fiu: Pointer to flash controller shared state. |
| */ |
| typedef struct NPCM7xxFIUFlash { |
| MemoryRegion direct_access; |
| NPCM7xxFIUState *fiu; |
| } NPCM7xxFIUFlash; |
| |
| /** |
| * NPCM7xxFIUState - Device state for one Flash Interface Unit. |
| * @parent: System bus device. |
| * @mmio: Memory region for register access. |
| * @cs_count: Number of flash chips that may be connected to this module. |
| * @active_cs: Currently active chip select, or -1 if no chip is selected. |
| * @cs_lines: GPIO lines that may be wired to flash chips. |
| * @flash: Array of @cs_count per-flash-chip state objects. |
| * @spi: The SPI bus mastered by this controller. |
| * @regs: Register contents. |
| * |
| * Each FIU has a shared bank of registers, and controls up to four chip |
| * selects. Each chip select has a dedicated memory region which may be used to |
| * read and write the flash connected to that chip select as if it were memory. |
| */ |
| struct NPCM7xxFIUState { |
| SysBusDevice parent; |
| |
| MemoryRegion mmio; |
| |
| int32_t cs_count; |
| int32_t active_cs; |
| qemu_irq *cs_lines; |
| NPCM7xxFIUFlash *flash; |
| |
| SSIBus *spi; |
| |
| uint32_t regs[NPCM7XX_FIU_NR_REGS]; |
| }; |
| |
| #define TYPE_NPCM7XX_FIU "npcm7xx-fiu" |
| #define NPCM7XX_FIU(obj) OBJECT_CHECK(NPCM7xxFIUState, (obj), TYPE_NPCM7XX_FIU) |
| |
| #endif /* NPCM7XX_FIU_H */ |