Previous 199869 Revisions Next

r33801 Wednesday 10th December, 2014 at 18:28:12 UTC by Olivier Galibert
pci: Autodetect multifunction devices [O. Galibert]
[src/emu/machine]pci.c pci.h

trunk/src/emu/machine/pci.c
r242312r242313
6363   revision = 0x00;
6464   pclass = 0xffffff;
6565   subsystem_id = 0xffffffff;
66   is_multifunction_device = false;
6667}
6768
6869void pci_device::set_ids(UINT32 _main_id, UINT8 _revision, UINT32 _pclass, UINT32 _subsystem_id)
r242312r242313
194195   return 0x00;
195196}
196197
198void pci_device::set_multifunction_device(bool enable)
199{
200   is_multifunction_device = enable;
201}
202
197203READ8_MEMBER(pci_device::header_type_r)
198204{
199   return 0x00;
205   return is_multifunction_device ? 0x80 : 0x00;
200206}
201207
202208READ8_MEMBER(pci_device::bist_r)
r242312r242313
237243   return 0x00;
238244}
239245
240void pci_device::scan_sub_devices(pci_device **devices, dynamic_array<pci_device *> &all, dynamic_array<pci_device *> &bridges, device_t *root)
241{
242}
243
244246void pci_device::set_remap_cb(mapper_cb _remap_cb)
245247{
246248   remap_cb = _remap_cb;
r242312r242313
425427
426428   for(int i=0; i<32*8; i++)
427429      if(sub_devices[i]) {
430         if((i & 7) && sub_devices[i & ~7])
431            sub_devices[i & ~7]->set_multifunction_device(true);
432
428433         all_devices.append(sub_devices[i]);
429434         if(sub_devices[i] != this) {
430435            sub_devices[i]->remap_config_cb = cf_cb;
trunk/src/emu/machine/pci.h
r242312r242313
3131   pci_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
3232
3333   void set_ids(UINT32 main_id, UINT8 revision, UINT32 pclass, UINT32 subsystem_id);
34   void set_multifunction_device(bool enable);
3435
3536   virtual void set_remap_cb(mapper_cb _remap_cb);
3637   virtual void reset_all_mappings();
r242312r242313
109110   const UINT8 *expansion_rom;
110111   UINT32 expansion_rom_size;
111112   UINT32 expansion_rom_base;
113   bool is_multifunction_device;
112114
113115   virtual void device_start();
114116   virtual void device_reset();
115117
116   static void scan_sub_devices(pci_device **devices, dynamic_array<pci_device *> &all, dynamic_array<pci_device *> &bridges, device_t *root);
117
118118   void skip_map_regs(int count);
119119   void add_map(UINT64 size, int flags, address_map_delegate &map);
120120   template <typename T> void add_map(UINT64 size, int flags, void (T::*map)(address_map &map, device_t &device), const char *name) {


Previous 199869 Revisions Next


© 1997-2024 The MAME Team