Lines Matching full: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 int ssb_pcmcia_switch_core(struct ssb_bus *bus, in ssb_pcmcia_switch_core() argument
162 err = ssb_pcmcia_switch_coreidx(bus, dev->core_index); in ssb_pcmcia_switch_core()
164 bus->mapped_device = dev; in ssb_pcmcia_switch_core()
169 int ssb_pcmcia_switch_segment(struct ssb_bus *bus, u8 seg) in ssb_pcmcia_switch_segment() argument
177 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_MEMSEG, seg); in ssb_pcmcia_switch_segment()
180 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_MEMSEG, &val); in ssb_pcmcia_switch_segment()
191 bus->mapped_pcmcia_seg = seg; in ssb_pcmcia_switch_segment()
202 struct ssb_bus *bus = dev->bus; in select_core_and_segment() local
212 if (unlikely(dev != bus->mapped_device)) { in select_core_and_segment()
213 err = ssb_pcmcia_switch_core(bus, dev); in select_core_and_segment()
217 if (unlikely(need_segment != bus->mapped_pcmcia_seg)) { in select_core_and_segment()
218 err = ssb_pcmcia_switch_segment(bus, need_segment); in select_core_and_segment()
228 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read8() local
233 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read8()
236 value = readb(bus->mmio + offset); in ssb_pcmcia_read8()
237 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read8()
244 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read16() local
249 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read16()
252 value = readw(bus->mmio + offset); in ssb_pcmcia_read16()
253 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read16()
260 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_read32() local
265 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_read32()
268 lo = readw(bus->mmio + offset); in ssb_pcmcia_read32()
269 hi = readw(bus->mmio + offset + 2); in ssb_pcmcia_read32()
271 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_read32()
280 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_block_read() local
282 void __iomem *addr = bus->mmio + offset; in ssb_pcmcia_block_read()
285 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_block_read()
330 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_block_read()
336 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write8() local
340 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write8()
343 writeb(value, bus->mmio + offset); in ssb_pcmcia_write8()
345 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write8()
350 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write16() local
354 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write16()
357 writew(value, bus->mmio + offset); in ssb_pcmcia_write16()
359 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write16()
364 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_write32() local
368 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_write32()
371 writew((value & 0x0000FFFF), bus->mmio + offset); in ssb_pcmcia_write32()
372 writew(((value & 0xFFFF0000) >> 16), bus->mmio + offset + 2); in ssb_pcmcia_write32()
375 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_write32()
382 struct ssb_bus *bus = dev->bus; in ssb_pcmcia_block_write() local
384 void __iomem *addr = bus->mmio + offset; in ssb_pcmcia_block_write()
387 spin_lock_irqsave(&bus->bar_lock, flags); in ssb_pcmcia_block_write()
431 spin_unlock_irqrestore(&bus->bar_lock, flags); in ssb_pcmcia_block_write()
449 static int ssb_pcmcia_sprom_command(struct ssb_bus *bus, u8 command) in ssb_pcmcia_sprom_command() argument
455 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROMCTL, command); in ssb_pcmcia_sprom_command()
459 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROMCTL, &value); in ssb_pcmcia_sprom_command()
471 static int ssb_pcmcia_sprom_read(struct ssb_bus *bus, u16 offset, u16 *value) in ssb_pcmcia_sprom_read() argument
478 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO, in ssb_pcmcia_sprom_read()
482 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI, in ssb_pcmcia_sprom_read()
486 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_READ); in ssb_pcmcia_sprom_read()
489 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATALO, &lo); in ssb_pcmcia_sprom_read()
492 err = ssb_pcmcia_cfg_read(bus, SSB_PCMCIA_SPROM_DATAHI, &hi); in ssb_pcmcia_sprom_read()
501 static int ssb_pcmcia_sprom_write(struct ssb_bus *bus, u16 offset, u16 value) in ssb_pcmcia_sprom_write() argument
507 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRLO, in ssb_pcmcia_sprom_write()
511 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_ADDRHI, in ssb_pcmcia_sprom_write()
515 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATALO, in ssb_pcmcia_sprom_write()
519 err = ssb_pcmcia_cfg_write(bus, SSB_PCMCIA_SPROM_DATAHI, in ssb_pcmcia_sprom_write()
523 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITE); in ssb_pcmcia_sprom_write()
532 static int ssb_pcmcia_sprom_read_all(struct ssb_bus *bus, u16 *sprom) in ssb_pcmcia_sprom_read_all() argument
537 err = ssb_pcmcia_sprom_read(bus, i, &sprom[i]); in ssb_pcmcia_sprom_read_all()
546 static int ssb_pcmcia_sprom_write_all(struct ssb_bus *bus, const u16 *sprom) in ssb_pcmcia_sprom_write_all() argument
555 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEEN); in ssb_pcmcia_sprom_write_all()
572 err = ssb_pcmcia_sprom_write(bus, i, sprom[i]); in ssb_pcmcia_sprom_write_all()
580 err = ssb_pcmcia_sprom_command(bus, SSB_PCMCIA_SPROMCTL_WRITEDIS); in ssb_pcmcia_sprom_write_all()
714 int ssb_pcmcia_get_invariants(struct ssb_bus *bus, in ssb_pcmcia_get_invariants() argument
726 res = pcmcia_loop_tuple(bus->host_pcmcia, CISTPL_FUNCE, in ssb_pcmcia_get_invariants()
735 res = pcmcia_loop_tuple(bus->host_pcmcia, SSB_PCMCIA_CIS, in ssb_pcmcia_get_invariants()
751 struct ssb_bus *bus; in ssb_pcmcia_attr_sprom_show() local
753 bus = ssb_pcmcia_dev_to_bus(pdev); in ssb_pcmcia_attr_sprom_show()
754 if (!bus) in ssb_pcmcia_attr_sprom_show()
757 return ssb_attr_sprom_show(bus, buf, in ssb_pcmcia_attr_sprom_show()
767 struct ssb_bus *bus; in ssb_pcmcia_attr_sprom_store() local
769 bus = ssb_pcmcia_dev_to_bus(pdev); in ssb_pcmcia_attr_sprom_store()
770 if (!bus) in ssb_pcmcia_attr_sprom_store()
773 return ssb_attr_sprom_store(bus, buf, count, in ssb_pcmcia_attr_sprom_store()
782 static int ssb_pcmcia_cor_setup(struct ssb_bus *bus, u8 cor) in ssb_pcmcia_cor_setup() argument
787 err = ssb_pcmcia_cfg_read(bus, cor, &val); in ssb_pcmcia_cor_setup()
792 err = ssb_pcmcia_cfg_write(bus, cor, val); in ssb_pcmcia_cor_setup()
801 int ssb_pcmcia_hardware_setup(struct ssb_bus *bus) in ssb_pcmcia_hardware_setup() argument
805 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_hardware_setup()
809 * bus->mapped_pcmcia_seg with hardware state. */ in ssb_pcmcia_hardware_setup()
810 ssb_pcmcia_switch_segment(bus, 0); in ssb_pcmcia_hardware_setup()
812 err = ssb_pcmcia_cor_setup(bus, CISREG_COR); in ssb_pcmcia_hardware_setup()
816 err = ssb_pcmcia_cor_setup(bus, CISREG_COR + 0x80); in ssb_pcmcia_hardware_setup()
823 void ssb_pcmcia_exit(struct ssb_bus *bus) in ssb_pcmcia_exit() argument
825 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_exit()
828 device_remove_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom); in ssb_pcmcia_exit()
831 int ssb_pcmcia_init(struct ssb_bus *bus) in ssb_pcmcia_init() argument
835 if (bus->bustype != SSB_BUSTYPE_PCMCIA) in ssb_pcmcia_init()
838 err = ssb_pcmcia_hardware_setup(bus); in ssb_pcmcia_init()
842 bus->sprom_size = SSB_PCMCIA_SPROM_SIZE; in ssb_pcmcia_init()
843 mutex_init(&bus->sprom_mutex); in ssb_pcmcia_init()
844 err = device_create_file(&bus->host_pcmcia->dev, &dev_attr_ssb_sprom); in ssb_pcmcia_init()