10d09e41aSPaolo Bonzini #ifndef HW_PCMCIA_H 20d09e41aSPaolo Bonzini #define HW_PCMCIA_H 1 30d09e41aSPaolo Bonzini 40d09e41aSPaolo Bonzini /* PCMCIA/Cardbus */ 50d09e41aSPaolo Bonzini 6*d1f2c96aSAndreas Färber #include "hw/qdev.h" 70d09e41aSPaolo Bonzini 8*d1f2c96aSAndreas Färber typedef struct PCMCIASocket { 90d09e41aSPaolo Bonzini qemu_irq irq; 10*d1f2c96aSAndreas Färber bool attached; 110d09e41aSPaolo Bonzini const char *slot_string; 120d09e41aSPaolo Bonzini const char *card_string; 130d09e41aSPaolo Bonzini } PCMCIASocket; 140d09e41aSPaolo Bonzini 150d09e41aSPaolo Bonzini void pcmcia_socket_register(PCMCIASocket *socket); 160d09e41aSPaolo Bonzini void pcmcia_socket_unregister(PCMCIASocket *socket); 170d09e41aSPaolo Bonzini void pcmcia_info(Monitor *mon, const QDict *qdict); 180d09e41aSPaolo Bonzini 19*d1f2c96aSAndreas Färber #define TYPE_PCMCIA_CARD "pcmcia-card" 20*d1f2c96aSAndreas Färber #define PCMCIA_CARD(obj) \ 21*d1f2c96aSAndreas Färber OBJECT_CHECK(PCMCIACardState, (obj), TYPE_PCMCIA_CARD) 22*d1f2c96aSAndreas Färber #define PCMCIA_CARD_GET_CLASS(obj) \ 23*d1f2c96aSAndreas Färber OBJECT_GET_CLASS(PCMCIACardClass, obj, TYPE_PCMCIA_CARD) 24*d1f2c96aSAndreas Färber #define PCMCIA_CARD_CLASS(cls) \ 25*d1f2c96aSAndreas Färber OBJECT_CLASS_CHECK(PCMCIACardClass, cls, TYPE_PCMCIA_CARD) 26*d1f2c96aSAndreas Färber 270d09e41aSPaolo Bonzini struct PCMCIACardState { 28*d1f2c96aSAndreas Färber /*< private >*/ 29*d1f2c96aSAndreas Färber DeviceState parent_obj; 30*d1f2c96aSAndreas Färber /*< public >*/ 31*d1f2c96aSAndreas Färber 320d09e41aSPaolo Bonzini PCMCIASocket *slot; 33*d1f2c96aSAndreas Färber }; 34*d1f2c96aSAndreas Färber 35*d1f2c96aSAndreas Färber typedef struct PCMCIACardClass { 36*d1f2c96aSAndreas Färber /*< private >*/ 37*d1f2c96aSAndreas Färber DeviceClass parent_class; 38*d1f2c96aSAndreas Färber /*< public >*/ 39*d1f2c96aSAndreas Färber 40*d1f2c96aSAndreas Färber int (*attach)(PCMCIACardState *state); 41*d1f2c96aSAndreas Färber int (*detach)(PCMCIACardState *state); 42*d1f2c96aSAndreas Färber 430d09e41aSPaolo Bonzini const uint8_t *cis; 440d09e41aSPaolo Bonzini int cis_len; 450d09e41aSPaolo Bonzini 460d09e41aSPaolo Bonzini /* Only valid if attached */ 47*d1f2c96aSAndreas Färber uint8_t (*attr_read)(PCMCIACardState *card, uint32_t address); 48*d1f2c96aSAndreas Färber void (*attr_write)(PCMCIACardState *card, uint32_t address, uint8_t value); 49*d1f2c96aSAndreas Färber uint16_t (*common_read)(PCMCIACardState *card, uint32_t address); 50*d1f2c96aSAndreas Färber void (*common_write)(PCMCIACardState *card, 51*d1f2c96aSAndreas Färber uint32_t address, uint16_t value); 52*d1f2c96aSAndreas Färber uint16_t (*io_read)(PCMCIACardState *card, uint32_t address); 53*d1f2c96aSAndreas Färber void (*io_write)(PCMCIACardState *card, uint32_t address, uint16_t value); 54*d1f2c96aSAndreas Färber } PCMCIACardClass; 550d09e41aSPaolo Bonzini 560d09e41aSPaolo Bonzini #define CISTPL_DEVICE 0x01 /* 5V Device Information Tuple */ 570d09e41aSPaolo Bonzini #define CISTPL_NO_LINK 0x14 /* No Link Tuple */ 580d09e41aSPaolo Bonzini #define CISTPL_VERS_1 0x15 /* Level 1 Version Tuple */ 590d09e41aSPaolo Bonzini #define CISTPL_JEDEC_C 0x18 /* JEDEC ID Tuple */ 600d09e41aSPaolo Bonzini #define CISTPL_JEDEC_A 0x19 /* JEDEC ID Tuple */ 610d09e41aSPaolo Bonzini #define CISTPL_CONFIG 0x1a /* Configuration Tuple */ 620d09e41aSPaolo Bonzini #define CISTPL_CFTABLE_ENTRY 0x1b /* 16-bit PCCard Configuration */ 630d09e41aSPaolo Bonzini #define CISTPL_DEVICE_OC 0x1c /* Additional Device Information */ 640d09e41aSPaolo Bonzini #define CISTPL_DEVICE_OA 0x1d /* Additional Device Information */ 650d09e41aSPaolo Bonzini #define CISTPL_DEVICE_GEO 0x1e /* Additional Device Information */ 660d09e41aSPaolo Bonzini #define CISTPL_DEVICE_GEO_A 0x1f /* Additional Device Information */ 670d09e41aSPaolo Bonzini #define CISTPL_MANFID 0x20 /* Manufacture ID Tuple */ 680d09e41aSPaolo Bonzini #define CISTPL_FUNCID 0x21 /* Function ID Tuple */ 690d09e41aSPaolo Bonzini #define CISTPL_FUNCE 0x22 /* Function Extension Tuple */ 700d09e41aSPaolo Bonzini #define CISTPL_END 0xff /* Tuple End */ 710d09e41aSPaolo Bonzini #define CISTPL_ENDMARK 0xff 720d09e41aSPaolo Bonzini 730d09e41aSPaolo Bonzini /* dscm1xxxx.c */ 740d09e41aSPaolo Bonzini PCMCIACardState *dscm1xxxx_init(DriveInfo *bdrv); 750d09e41aSPaolo Bonzini 760d09e41aSPaolo Bonzini #endif 77