[RAPIDIO] Add RapidIO multi mport support
The original RapidIO driver suppose there is only one mpc85xx RIO controller in system. So, some data structures are defined as mpc85xx_rio global, such as 'regs_win', 'dbell_ring', 'msg_tx_ring'. Now, I changed them to mport's private members. And you can define multi RIO OF-nodes in dts file for multi RapidIO controller in one processor, such as PCI/PCI-Ex host controllers in Freescale's silicon. And the mport operation function declaration should be changed to know which RapidIO controller is target. Signed-off-by: Zhang Wei <wei.zhang@freescale.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
committed by
Paul Mackerras
parent
5a7b60ed88
commit
ad1e9380b1
@@ -48,7 +48,7 @@ int __rio_local_read_config_##size \
|
||||
u32 data = 0; \
|
||||
if (RIO_##size##_BAD) return RIO_BAD_SIZE; \
|
||||
spin_lock_irqsave(&rio_config_lock, flags); \
|
||||
res = mport->ops->lcread(mport->id, offset, len, &data); \
|
||||
res = mport->ops->lcread(mport, mport->id, offset, len, &data); \
|
||||
*value = (type)data; \
|
||||
spin_unlock_irqrestore(&rio_config_lock, flags); \
|
||||
return res; \
|
||||
@@ -71,7 +71,7 @@ int __rio_local_write_config_##size \
|
||||
unsigned long flags; \
|
||||
if (RIO_##size##_BAD) return RIO_BAD_SIZE; \
|
||||
spin_lock_irqsave(&rio_config_lock, flags); \
|
||||
res = mport->ops->lcwrite(mport->id, offset, len, value); \
|
||||
res = mport->ops->lcwrite(mport, mport->id, offset, len, value);\
|
||||
spin_unlock_irqrestore(&rio_config_lock, flags); \
|
||||
return res; \
|
||||
}
|
||||
@@ -108,7 +108,7 @@ int rio_mport_read_config_##size \
|
||||
u32 data = 0; \
|
||||
if (RIO_##size##_BAD) return RIO_BAD_SIZE; \
|
||||
spin_lock_irqsave(&rio_config_lock, flags); \
|
||||
res = mport->ops->cread(mport->id, destid, hopcount, offset, len, &data); \
|
||||
res = mport->ops->cread(mport, mport->id, destid, hopcount, offset, len, &data); \
|
||||
*value = (type)data; \
|
||||
spin_unlock_irqrestore(&rio_config_lock, flags); \
|
||||
return res; \
|
||||
@@ -131,7 +131,7 @@ int rio_mport_write_config_##size \
|
||||
unsigned long flags; \
|
||||
if (RIO_##size##_BAD) return RIO_BAD_SIZE; \
|
||||
spin_lock_irqsave(&rio_config_lock, flags); \
|
||||
res = mport->ops->cwrite(mport->id, destid, hopcount, offset, len, value); \
|
||||
res = mport->ops->cwrite(mport, mport->id, destid, hopcount, offset, len, value); \
|
||||
spin_unlock_irqrestore(&rio_config_lock, flags); \
|
||||
return res; \
|
||||
}
|
||||
@@ -166,7 +166,7 @@ int rio_mport_send_doorbell(struct rio_mport *mport, u16 destid, u16 data)
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&rio_doorbell_lock, flags);
|
||||
res = mport->ops->dsend(mport->id, destid, data);
|
||||
res = mport->ops->dsend(mport, mport->id, destid, data);
|
||||
spin_unlock_irqrestore(&rio_doorbell_lock, flags);
|
||||
|
||||
return res;
|
||||
|
Reference in New Issue
Block a user