4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, see <http://www.gnu.org/licenses/>.
18 #include "qemu/osdep.h"
19 #include "qapi/error.h"
21 #include "hw/sd/sdhci.h"
22 #include "sdhci-internal.h"
24 static Property sdhci_pci_properties
[] = {
25 DEFINE_SDHCI_COMMON_PROPERTIES(SDHCIState
),
26 DEFINE_PROP_END_OF_LIST(),
29 static void sdhci_pci_realize(PCIDevice
*dev
, Error
**errp
)
31 SDHCIState
*s
= PCI_SDHCI(dev
);
32 Error
*local_err
= NULL
;
35 sdhci_common_realize(s
, &local_err
);
37 error_propagate(errp
, local_err
);
41 dev
->config
[PCI_CLASS_PROG
] = 0x01; /* Standard Host supported DMA */
42 dev
->config
[PCI_INTERRUPT_PIN
] = 0x01; /* interrupt pin A */
43 s
->irq
= pci_allocate_irq(dev
);
44 s
->dma_as
= pci_get_address_space(dev
);
45 pci_register_bar(dev
, 0, PCI_BASE_ADDRESS_SPACE_MEMORY
, &s
->iomem
);
48 static void sdhci_pci_exit(PCIDevice
*dev
)
50 SDHCIState
*s
= PCI_SDHCI(dev
);
52 sdhci_common_unrealize(s
, &error_abort
);
56 static void sdhci_pci_class_init(ObjectClass
*klass
, void *data
)
58 DeviceClass
*dc
= DEVICE_CLASS(klass
);
59 PCIDeviceClass
*k
= PCI_DEVICE_CLASS(klass
);
61 k
->realize
= sdhci_pci_realize
;
62 k
->exit
= sdhci_pci_exit
;
63 k
->vendor_id
= PCI_VENDOR_ID_REDHAT
;
64 k
->device_id
= PCI_DEVICE_ID_REDHAT_SDHCI
;
65 k
->class_id
= PCI_CLASS_SYSTEM_SDHCI
;
66 dc
->props
= sdhci_pci_properties
;
68 sdhci_common_class_init(klass
, data
);
71 static const TypeInfo sdhci_pci_info
= {
72 .name
= TYPE_PCI_SDHCI
,
73 .parent
= TYPE_PCI_DEVICE
,
74 .instance_size
= sizeof(SDHCIState
),
75 .class_init
= sdhci_pci_class_init
,
76 .interfaces
= (InterfaceInfo
[]) {
77 { INTERFACE_CONVENTIONAL_PCI_DEVICE
},
82 static void sdhci_pci_register_type(void)
84 type_register_static(&sdhci_pci_info
);
87 type_init(sdhci_pci_register_type
)