10d09e41aSPaolo Bonzini #ifndef HW_PCMCIA_H 2175de524SMarkus Armbruster #define HW_PCMCIA_H 30d09e41aSPaolo Bonzini 40d09e41aSPaolo Bonzini /* PCMCIA/Cardbus */ 50d09e41aSPaolo Bonzini 6a27bd6c7SMarkus Armbruster #include "hw/qdev-core.h" 7db1015e9SEduardo Habkost #include "qom/object.h" 80d09e41aSPaolo Bonzini 9d1f2c96aSAndreas Färber typedef struct PCMCIASocket { 100d09e41aSPaolo Bonzini qemu_irq irq; 11d1f2c96aSAndreas Färber bool attached; 120d09e41aSPaolo Bonzini } PCMCIASocket; 130d09e41aSPaolo Bonzini 14d1f2c96aSAndreas Färber #define TYPE_PCMCIA_CARD "pcmcia-card" 15*a489d195SEduardo Habkost OBJECT_DECLARE_TYPE(PCMCIACardState, PCMCIACardClass, PCMCIA_CARD) 16d1f2c96aSAndreas Färber 17db1015e9SEduardo Habkost struct PCMCIACardState { 18d1f2c96aSAndreas Färber /*< private >*/ 19d1f2c96aSAndreas Färber DeviceState parent_obj; 20d1f2c96aSAndreas Färber /*< public >*/ 21d1f2c96aSAndreas Färber 220d09e41aSPaolo Bonzini PCMCIASocket *slot; 23db1015e9SEduardo Habkost }; 24d1f2c96aSAndreas Färber 25db1015e9SEduardo Habkost struct PCMCIACardClass { 26d1f2c96aSAndreas Färber /*< private >*/ 27d1f2c96aSAndreas Färber DeviceClass parent_class; 28d1f2c96aSAndreas Färber /*< public >*/ 29d1f2c96aSAndreas Färber 30d1f2c96aSAndreas Färber int (*attach)(PCMCIACardState *state); 31d1f2c96aSAndreas Färber int (*detach)(PCMCIACardState *state); 32d1f2c96aSAndreas Färber 330d09e41aSPaolo Bonzini const uint8_t *cis; 340d09e41aSPaolo Bonzini int cis_len; 350d09e41aSPaolo Bonzini 360d09e41aSPaolo Bonzini /* Only valid if attached */ 37d1f2c96aSAndreas Färber uint8_t (*attr_read)(PCMCIACardState *card, uint32_t address); 38d1f2c96aSAndreas Färber void (*attr_write)(PCMCIACardState *card, uint32_t address, uint8_t value); 39d1f2c96aSAndreas Färber uint16_t (*common_read)(PCMCIACardState *card, uint32_t address); 40d1f2c96aSAndreas Färber void (*common_write)(PCMCIACardState *card, 41d1f2c96aSAndreas Färber uint32_t address, uint16_t value); 42d1f2c96aSAndreas Färber uint16_t (*io_read)(PCMCIACardState *card, uint32_t address); 43d1f2c96aSAndreas Färber void (*io_write)(PCMCIACardState *card, uint32_t address, uint16_t value); 44db1015e9SEduardo Habkost }; 450d09e41aSPaolo Bonzini 460d09e41aSPaolo Bonzini #define CISTPL_DEVICE 0x01 /* 5V Device Information Tuple */ 470d09e41aSPaolo Bonzini #define CISTPL_NO_LINK 0x14 /* No Link Tuple */ 480d09e41aSPaolo Bonzini #define CISTPL_VERS_1 0x15 /* Level 1 Version Tuple */ 490d09e41aSPaolo Bonzini #define CISTPL_JEDEC_C 0x18 /* JEDEC ID Tuple */ 500d09e41aSPaolo Bonzini #define CISTPL_JEDEC_A 0x19 /* JEDEC ID Tuple */ 510d09e41aSPaolo Bonzini #define CISTPL_CONFIG 0x1a /* Configuration Tuple */ 520d09e41aSPaolo Bonzini #define CISTPL_CFTABLE_ENTRY 0x1b /* 16-bit PCCard Configuration */ 530d09e41aSPaolo Bonzini #define CISTPL_DEVICE_OC 0x1c /* Additional Device Information */ 540d09e41aSPaolo Bonzini #define CISTPL_DEVICE_OA 0x1d /* Additional Device Information */ 550d09e41aSPaolo Bonzini #define CISTPL_DEVICE_GEO 0x1e /* Additional Device Information */ 560d09e41aSPaolo Bonzini #define CISTPL_DEVICE_GEO_A 0x1f /* Additional Device Information */ 570d09e41aSPaolo Bonzini #define CISTPL_MANFID 0x20 /* Manufacture ID Tuple */ 580d09e41aSPaolo Bonzini #define CISTPL_FUNCID 0x21 /* Function ID Tuple */ 590d09e41aSPaolo Bonzini #define CISTPL_FUNCE 0x22 /* Function Extension Tuple */ 600d09e41aSPaolo Bonzini #define CISTPL_END 0xff /* Tuple End */ 610d09e41aSPaolo Bonzini #define CISTPL_ENDMARK 0xff 620d09e41aSPaolo Bonzini 630d09e41aSPaolo Bonzini /* dscm1xxxx.c */ 640d09e41aSPaolo Bonzini PCMCIACardState *dscm1xxxx_init(DriveInfo *bdrv); 650d09e41aSPaolo Bonzini 660d09e41aSPaolo Bonzini #endif 67