Lines Matching refs:bus
71 static int ssb_pcmcia_cfg_write(struct ssb_bus *bus, u8 offset, u8 value) in ssb_pcmcia_cfg_write() argument
75 res = pcmcia_write_config_byte(bus->host_pcmcia, offset, value); in ssb_pcmcia_cfg_write()
83 static int ssb_pcmcia_cfg_read(struct ssb_bus *bus, u8 offset, u8 *value) in ssb_pcmcia_cfg_read() argument
87 res = pcmcia_read_config_byte(bus->host_pcmcia, offset, value); in ssb_pcmcia_cfg_read()
94 int ssb_pcmcia_switch_coreidx(struct ssb_bus *bus, in ssb_pcmcia_switch_coreidx() argument
106 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS0, in ssb_pcmcia_switch_coreidx()
110 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS1, in ssb_pcmcia_switch_coreidx()
114 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_ADDRESS2, in ssb_pcmcia_switch_coreidx()
121 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS0, &val); in ssb_pcmcia_switch_coreidx()
125 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS1, &val); in ssb_pcmcia_switch_coreidx()
129 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_ADDRESS2, &val); in ssb_pcmcia_switch_coreidx()
150 static int ssb_pcmcia_switch_core(struct ssb_bus *bus, struct ssb_device *dev) in ssb_pcmcia_switch_core() argument
160 err = ssb_pcmcia_switch_coreidx(bus, dev->core_index); in ssb_pcmcia_switch_core()
162 bus->mapped_device = dev; in ssb_pcmcia_switch_core()
167 int ssb_pcmcia_switch_segment(struct ssb_bus *bus, u8 seg) in ssb_pcmcia_switch_segment() argument
175 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_MEMSEG, seg); in ssb_pcmcia_switch_segment()
178 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_MEMSEG, &val); in ssb_pcmcia_switch_segment()
189 bus->mapped_pcmcia_seg = seg; in ssb_pcmcia_switch_segment()
200 struct ssb_bus *bus = dev->bus; in select_core_and_segment() local
210 if (unlikely(dev != bus->mapped_device)) { in select_core_and_segment()
211 err = ssb_pcmcia_switch_core(bus, dev); in select_core_and_segment()
215 if (unlikely(need_segment != bus->mapped_pcmcia_seg)) { in select_core_and_segment()
216 err = ssb_pcmcia_switch_segment(bus, need_segment); in select_core_and_segment()
226 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read8() local
231 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read8()
234 value = readb(bus->mmio + offset); in ssb_pcmcia_read8()
235 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read8()
242 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read16() local
247 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read16()
250 value = readw(bus->mmio + offset); in ssb_pcmcia_read16()
251 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read16()
258 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read32() local
263 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read32()
266 lo = readw(bus->mmio + offset); in ssb_pcmcia_read32()
267 hi = readw(bus->mmio + offset + 2); in ssb_pcmcia_read32()
269 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read32()
278 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_block_read() local
280 void __iomem *addr = bus->mmio + offset; in ssb_pcmcia_block_read()
283 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_block_read()
328 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_block_read()
334 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write8() local
338 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write8()
341 writeb(value, bus->mmio + offset); in ssb_pcmcia_write8()
343 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write8()
348 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write16() local
352 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write16()
355 writew(value, bus->mmio + offset); in ssb_pcmcia_write16()
357 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write16()
362 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write32() local
366 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write32()
369 writew((value & 0x0000FFFF), bus->mmio + offset); in ssb_pcmcia_write32()
370 writew(((value & 0xFFFF0000) >> 16), bus->mmio + offset + 2); in ssb_pcmcia_write32()
373 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write32()
380 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_block_write() local
382 void __iomem *addr = bus->mmio + offset; in ssb_pcmcia_block_write()
385 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_block_write()
429 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_block_write()
447 static int ssb_pcmcia_sprom_command(struct ssb_bus *bus, u8 command) in ssb_pcmcia_sprom_command() argument
453 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROMCTL, command); in ssb_pcmcia_sprom_command()
457 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROMCTL, &value); in ssb_pcmcia_sprom_command()
469 static int ssb_pcmcia_sprom_read(struct ssb_bus *bus, u16 offset, u16 *value) in ssb_pcmcia_sprom_read() argument
476 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO, in ssb_pcmcia_sprom_read()
480 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI, in ssb_pcmcia_sprom_read()
484 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_READ); in ssb_pcmcia_sprom_read()
487 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATALO, &lo); in ssb_pcmcia_sprom_read()
490 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATAHI, &hi); in ssb_pcmcia_sprom_read()
499 static int ssb_pcmcia_sprom_write(struct ssb_bus *bus, u16 offset, u16 value) in ssb_pcmcia_sprom_write() argument
505 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO, in ssb_pcmcia_sprom_write()
509 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI, in ssb_pcmcia_sprom_write()
513 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATALO, in ssb_pcmcia_sprom_write()
517 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATAHI, in ssb_pcmcia_sprom_write()
521 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITE); in ssb_pcmcia_sprom_write()
530 static int ssb_pcmcia_sprom_read_all(struct ssb_bus *bus, u16 *sprom) in ssb_pcmcia_sprom_read_all() argument
535 err = ssb_pcmcia_sprom_read(bus, i, &sprom[i]); in ssb_pcmcia_sprom_read_all()
544 static int ssb_pcmcia_sprom_write_all(struct ssb_bus *bus, const u16 *sprom) in ssb_pcmcia_sprom_write_all() argument
551 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEEN); in ssb_pcmcia_sprom_write_all()
567 err = ssb_pcmcia_sprom_write(bus, i, sprom[i]); in ssb_pcmcia_sprom_write_all()
574 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEDIS); in ssb_pcmcia_sprom_write_all()
703 int ssb_pcmcia_get_invariants(struct ssb_bus *bus, in ssb_pcmcia_get_invariants() argument
715 res = pcmcia_loop_tuple(bus->host_pcmcia, CISTPL_FUNCE, in ssb_pcmcia_get_invariants()
724 res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS, in ssb_pcmcia_get_invariants()
740 struct ssb_bus *bus; in ssb_pcmcia_attr_sprom_show() local
742 bus = ssb_pcmcia_dev_to_bus(pdev); in ssb_pcmcia_attr_sprom_show()
743 if (!bus) in ssb_pcmcia_attr_sprom_show()
746 return ssb_attr_sprom_show(bus, buf, in ssb_pcmcia_attr_sprom_show()
756 struct ssb_bus *bus; in ssb_pcmcia_attr_sprom_store() local
758 bus = ssb_pcmcia_dev_to_bus(pdev); in ssb_pcmcia_attr_sprom_store()
759 if (!bus) in ssb_pcmcia_attr_sprom_store()
762 return ssb_attr_sprom_store(bus, buf, count, in ssb_pcmcia_attr_sprom_store()
771 static int ssb_pcmcia_cor_setup(struct ssb_bus *bus, u8 cor) in ssb_pcmcia_cor_setup() argument
776 err = ssb_pcmcia_cfg_read(bus, cor, &val); in ssb_pcmcia_cor_setup()
781 err = ssb_pcmcia_cfg_write(bus, cor, val); in ssb_pcmcia_cor_setup()
790 int ssb_pcmcia_hardware_setup(struct ssb_bus *bus) in ssb_pcmcia_hardware_setup() argument
794 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_hardware_setup()
799 ssb_pcmcia_switch_segment(bus, 0); in ssb_pcmcia_hardware_setup()
801 err = ssb_pcmcia_cor_setup(bus, CISREG_COR); in ssb_pcmcia_hardware_setup()
805 err = ssb_pcmcia_cor_setup(bus, CISREG_COR + 0x80); in ssb_pcmcia_hardware_setup()
812 void ssb_pcmcia_exit(struct ssb_bus *bus) in ssb_pcmcia_exit() argument
814 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_exit()
817 device_remove_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom); in ssb_pcmcia_exit()
820 int ssb_pcmcia_init(struct ssb_bus *bus) in ssb_pcmcia_init() argument
824 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_init()
827 err = ssb_pcmcia_hardware_setup(bus); in ssb_pcmcia_init()
831 bus->sprom_size = SSB_PCMCIA_SPROM_SIZE; in ssb_pcmcia_init()
832 mutex_init(&bus->sprom_mutex); in ssb_pcmcia_init()
833 err = device_create_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom); in ssb_pcmcia_init()