ssb: Add support for block-I/O
This adds support for block based I/O to SSB. This is needed in order to efficiently support PIO data transfers to the card. The block-I/O support is only compiled, if it's selected by the weird driver that needs it. So there's no overhead for sane devices. Signed-off-by: Michael Buesch <mb@bu3sch.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
93af261451
commit
d625a29ba6
@@ -78,6 +78,12 @@ struct ssb_bus_ops {
|
||||
void (*write8)(struct ssb_device *dev, u16 offset, u8 value);
|
||||
void (*write16)(struct ssb_device *dev, u16 offset, u16 value);
|
||||
void (*write32)(struct ssb_device *dev, u16 offset, u32 value);
|
||||
#ifdef CONFIG_SSB_BLOCKIO
|
||||
void (*block_read)(struct ssb_device *dev, void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width);
|
||||
void (*block_write)(struct ssb_device *dev, const void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
@@ -374,6 +380,19 @@ static inline void ssb_write32(struct ssb_device *dev, u16 offset, u32 value)
|
||||
{
|
||||
dev->ops->write32(dev, offset, value);
|
||||
}
|
||||
#ifdef CONFIG_SSB_BLOCKIO
|
||||
static inline void ssb_block_read(struct ssb_device *dev, void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
{
|
||||
dev->ops->block_read(dev, buffer, count, offset, reg_width);
|
||||
}
|
||||
|
||||
static inline void ssb_block_write(struct ssb_device *dev, const void *buffer,
|
||||
size_t count, u16 offset, u8 reg_width)
|
||||
{
|
||||
dev->ops->block_write(dev, buffer, count, offset, reg_width);
|
||||
}
|
||||
#endif /* CONFIG_SSB_BLOCKIO */
|
||||
|
||||
|
||||
/* Translation (routing) bits that need to be ORed to DMA
|
||||
|
Reference in New Issue
Block a user