Lines Matching refs:bus
71 static int ssb_pcmcia_cfg_write(struct ssb_bus *bus, u8 offset, u8 value)
75 res = pcmcia_write_config_byte(bus->host_pcmcia, offset, value);
83 static int ssb_pcmcia_cfg_read(struct ssb_bus *bus, u8 offset, u8 *value)
87 res = pcmcia_read_config_byte(bus->host_pcmcia, offset, value);
94 int ssb_pcmcia_switch_coreidx(struct ssb_bus *bus,
106 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS0,
110 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS1,
114 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS2,
121 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS0, &val);
125 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS1, &val);
129 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS2, &val);
150 static int ssb_pcmcia_switch_core(struct ssb_bus *bus, struct ssb_device *dev)
159 err = ssb_pcmcia_switch_coreidx(bus, dev->core_index);
161 bus->mapped_device = dev;
166 int ssb_pcmcia_switch_segment(struct ssb_bus *bus, u8 seg)
174 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_MEMSEG, seg);
177 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_MEMSEG, &val);
188 bus->mapped_pcmcia_seg = seg;
199 struct ssb_bus *bus = dev->bus;
209 if (unlikely(dev != bus->mapped_device)) {
210 err = ssb_pcmcia_switch_core(bus, dev);
214 if (unlikely(need_segment != bus->mapped_pcmcia_seg)) {
215 err = ssb_pcmcia_switch_segment(bus, need_segment);
225 struct ssb_bus *bus = dev->bus;
230 spin_lock_irqsave(&bus->bar_lock, flags);
233 value = readb(bus->mmio + offset);
234 spin_unlock_irqrestore(&bus->bar_lock, flags);
241 struct ssb_bus *bus = dev->bus;
246 spin_lock_irqsave(&bus->bar_lock, flags);
249 value = readw(bus->mmio + offset);
250 spin_unlock_irqrestore(&bus->bar_lock, flags);
257 struct ssb_bus *bus = dev->bus;
262 spin_lock_irqsave(&bus->bar_lock, flags);
265 lo = readw(bus->mmio + offset);
266 hi = readw(bus->mmio + offset + 2);
268 spin_unlock_irqrestore(&bus->bar_lock, flags);
277 struct ssb_bus *bus = dev->bus;
279 void __iomem *addr = bus->mmio + offset;
282 spin_lock_irqsave(&bus->bar_lock, flags);
327 spin_unlock_irqrestore(&bus->bar_lock, flags);
333 struct ssb_bus *bus = dev->bus;
337 spin_lock_irqsave(&bus->bar_lock, flags);
340 writeb(value, bus->mmio + offset);
341 spin_unlock_irqrestore(&bus->bar_lock, flags);
346 struct ssb_bus *bus = dev->bus;
350 spin_lock_irqsave(&bus->bar_lock, flags);
353 writew(value, bus->mmio + offset);
354 spin_unlock_irqrestore(&bus->bar_lock, flags);
359 struct ssb_bus *bus = dev->bus;
363 spin_lock_irqsave(&bus->bar_lock, flags);
366 writew((value & 0x0000FFFF), bus->mmio + offset);
367 writew(((value & 0xFFFF0000) >> 16), bus->mmio + offset + 2);
369 spin_unlock_irqrestore(&bus->bar_lock, flags);
376 struct ssb_bus *bus = dev->bus;
378 void __iomem *addr = bus->mmio + offset;
381 spin_lock_irqsave(&bus->bar_lock, flags);
424 spin_unlock_irqrestore(&bus->bar_lock, flags);
442 static int ssb_pcmcia_sprom_command(struct ssb_bus *bus, u8 command)
448 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROMCTL, command);
452 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROMCTL, &value);
464 static int ssb_pcmcia_sprom_read(struct ssb_bus *bus, u16 offset, u16 *value)
471 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO,
475 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI,
479 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_READ);
482 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATALO, &lo);
485 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATAHI, &hi);
494 static int ssb_pcmcia_sprom_write(struct ssb_bus *bus, u16 offset, u16 value)
500 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO,
504 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI,
508 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATALO,
512 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATAHI,
516 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITE);
525 static int ssb_pcmcia_sprom_read_all(struct ssb_bus *bus, u16 *sprom)
530 err = ssb_pcmcia_sprom_read(bus, i, &sprom[i]);
539 static int ssb_pcmcia_sprom_write_all(struct ssb_bus *bus, const u16 *sprom)
546 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEEN);
562 err = ssb_pcmcia_sprom_write(bus, i, sprom[i]);
569 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEDIS);
697 int ssb_pcmcia_get_invariants(struct ssb_bus *bus,
709 res = pcmcia_loop_tuple(bus->host_pcmcia, CISTPL_FUNCE,
717 res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS,
732 struct ssb_bus *bus;
734 bus = ssb_pcmcia_dev_to_bus(pdev);
735 if (!bus)
738 return ssb_attr_sprom_show(bus, buf,
748 struct ssb_bus *bus;
750 bus = ssb_pcmcia_dev_to_bus(pdev);
751 if (!bus)
754 return ssb_attr_sprom_store(bus, buf, count,
761 static int ssb_pcmcia_cor_setup(struct ssb_bus *bus, u8 cor)
766 err = ssb_pcmcia_cfg_read(bus, cor, &val);
771 err = ssb_pcmcia_cfg_write(bus, cor, val);
780 int ssb_pcmcia_hardware_setup(struct ssb_bus *bus)
784 if (bus->bustype != SSB_BUSTYPE_PCMCIA)
788 * bus->mapped_pcmcia_seg with hardware state. */
789 ssb_pcmcia_switch_segment(bus, 0);
791 err = ssb_pcmcia_cor_setup(bus, CISREG_COR);
795 err = ssb_pcmcia_cor_setup(bus, CISREG_COR + 0x80);
802 void ssb_pcmcia_exit(struct ssb_bus *bus)
804 if (bus->bustype != SSB_BUSTYPE_PCMCIA)
807 device_remove_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom);
810 int ssb_pcmcia_init(struct ssb_bus *bus)
814 if (bus->bustype != SSB_BUSTYPE_PCMCIA)
817 err = ssb_pcmcia_hardware_setup(bus);
821 bus->sprom_size = SSB_PCMCIA_SPROM_SIZE;
822 mutex_init(&bus->sprom_mutex);
823 err = device_create_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom);