10d09e41aSPaolo Bonzini #ifndef HW_PCMCIA_H 2*175de524SMarkus Armbruster #define HW_PCMCIA_H 30d09e41aSPaolo Bonzini 40d09e41aSPaolo Bonzini /* PCMCIA/Cardbus */ 50d09e41aSPaolo Bonzini 6d1f2c96aSAndreas Färber #include "hw/qdev.h" 70d09e41aSPaolo Bonzini 8d1f2c96aSAndreas Färber typedef struct PCMCIASocket { 90d09e41aSPaolo Bonzini qemu_irq irq; 10d1f2c96aSAndreas Färber bool attached; 110d09e41aSPaolo Bonzini } PCMCIASocket; 120d09e41aSPaolo Bonzini 13d1f2c96aSAndreas Färber #define TYPE_PCMCIA_CARD "pcmcia-card" 14d1f2c96aSAndreas Färber #define PCMCIA_CARD(obj) \ 15d1f2c96aSAndreas Färber OBJECT_CHECK(PCMCIACardState, (obj), TYPE_PCMCIA_CARD) 16d1f2c96aSAndreas Färber #define PCMCIA_CARD_GET_CLASS(obj) \ 17d1f2c96aSAndreas Färber OBJECT_GET_CLASS(PCMCIACardClass, obj, TYPE_PCMCIA_CARD) 18d1f2c96aSAndreas Färber #define PCMCIA_CARD_CLASS(cls) \ 19d1f2c96aSAndreas Färber OBJECT_CLASS_CHECK(PCMCIACardClass, cls, TYPE_PCMCIA_CARD) 20d1f2c96aSAndreas Färber 210d09e41aSPaolo Bonzini struct PCMCIACardState { 22d1f2c96aSAndreas Färber /*< private >*/ 23d1f2c96aSAndreas Färber DeviceState parent_obj; 24d1f2c96aSAndreas Färber /*< public >*/ 25d1f2c96aSAndreas Färber 260d09e41aSPaolo Bonzini PCMCIASocket *slot; 27d1f2c96aSAndreas Färber }; 28d1f2c96aSAndreas Färber 29d1f2c96aSAndreas Färber typedef struct PCMCIACardClass { 30d1f2c96aSAndreas Färber /*< private >*/ 31d1f2c96aSAndreas Färber DeviceClass parent_class; 32d1f2c96aSAndreas Färber /*< public >*/ 33d1f2c96aSAndreas Färber 34d1f2c96aSAndreas Färber int (*attach)(PCMCIACardState *state); 35d1f2c96aSAndreas Färber int (*detach)(PCMCIACardState *state); 36d1f2c96aSAndreas Färber 370d09e41aSPaolo Bonzini const uint8_t *cis; 380d09e41aSPaolo Bonzini int cis_len; 390d09e41aSPaolo Bonzini 400d09e41aSPaolo Bonzini /* Only valid if attached */ 41d1f2c96aSAndreas Färber uint8_t (*attr_read)(PCMCIACardState *card, uint32_t address); 42d1f2c96aSAndreas Färber void (*attr_write)(PCMCIACardState *card, uint32_t address, uint8_t value); 43d1f2c96aSAndreas Färber uint16_t (*common_read)(PCMCIACardState *card, uint32_t address); 44d1f2c96aSAndreas Färber void (*common_write)(PCMCIACardState *card, 45d1f2c96aSAndreas Färber uint32_t address, uint16_t value); 46d1f2c96aSAndreas Färber uint16_t (*io_read)(PCMCIACardState *card, uint32_t address); 47d1f2c96aSAndreas Färber void (*io_write)(PCMCIACardState *card, uint32_t address, uint16_t value); 48d1f2c96aSAndreas Färber } PCMCIACardClass; 490d09e41aSPaolo Bonzini 500d09e41aSPaolo Bonzini #define CISTPL_DEVICE 0x01 /* 5V Device Information Tuple */ 510d09e41aSPaolo Bonzini #define CISTPL_NO_LINK 0x14 /* No Link Tuple */ 520d09e41aSPaolo Bonzini #define CISTPL_VERS_1 0x15 /* Level 1 Version Tuple */ 530d09e41aSPaolo Bonzini #define CISTPL_JEDEC_C 0x18 /* JEDEC ID Tuple */ 540d09e41aSPaolo Bonzini #define CISTPL_JEDEC_A 0x19 /* JEDEC ID Tuple */ 550d09e41aSPaolo Bonzini #define CISTPL_CONFIG 0x1a /* Configuration Tuple */ 560d09e41aSPaolo Bonzini #define CISTPL_CFTABLE_ENTRY 0x1b /* 16-bit PCCard Configuration */ 570d09e41aSPaolo Bonzini #define CISTPL_DEVICE_OC 0x1c /* Additional Device Information */ 580d09e41aSPaolo Bonzini #define CISTPL_DEVICE_OA 0x1d /* Additional Device Information */ 590d09e41aSPaolo Bonzini #define CISTPL_DEVICE_GEO 0x1e /* Additional Device Information */ 600d09e41aSPaolo Bonzini #define CISTPL_DEVICE_GEO_A 0x1f /* Additional Device Information */ 610d09e41aSPaolo Bonzini #define CISTPL_MANFID 0x20 /* Manufacture ID Tuple */ 620d09e41aSPaolo Bonzini #define CISTPL_FUNCID 0x21 /* Function ID Tuple */ 630d09e41aSPaolo Bonzini #define CISTPL_FUNCE 0x22 /* Function Extension Tuple */ 640d09e41aSPaolo Bonzini #define CISTPL_END 0xff /* Tuple End */ 650d09e41aSPaolo Bonzini #define CISTPL_ENDMARK 0xff 660d09e41aSPaolo Bonzini 670d09e41aSPaolo Bonzini /* dscm1xxxx.c */ 680d09e41aSPaolo Bonzini PCMCIACardState *dscm1xxxx_init(DriveInfo *bdrv); 690d09e41aSPaolo Bonzini 700d09e41aSPaolo Bonzini #endif 71