forked from Minki/linux
Staging: ipack: Add IPACK_INT_SPACE memory space.
This will allow us to correctly access the IPack INT space. Signed-off-by: Jens Taprogge <jens.taprogge@taprogge.org> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7505817603
commit
e4af9497b6
@ -95,6 +95,8 @@ static void tpci200_unregister(struct tpci200_board *tpci200)
|
||||
tpci200->slots[i].io_phys.size = 0;
|
||||
tpci200->slots[i].id_phys.address = NULL;
|
||||
tpci200->slots[i].id_phys.size = 0;
|
||||
tpci200->slots[i].int_phys.address = NULL;
|
||||
tpci200->slots[i].int_phys.size = 0;
|
||||
tpci200->slots[i].mem_phys.address = NULL;
|
||||
tpci200->slots[i].mem_phys.size = 0;
|
||||
}
|
||||
@ -331,6 +333,11 @@ static int tpci200_register(struct tpci200_board *tpci200)
|
||||
TPCI200_ID_SPACE_OFF + TPCI200_ID_SPACE_GAP*i;
|
||||
tpci200->slots[i].id_phys.size = TPCI200_ID_SPACE_SIZE;
|
||||
|
||||
tpci200->slots[i].int_phys.address =
|
||||
(void __iomem *)ioidint_base +
|
||||
TPCI200_INT_SPACE_OFF + TPCI200_INT_SPACE_GAP * i;
|
||||
tpci200->slots[i].int_phys.size = TPCI200_INT_SPACE_SIZE;
|
||||
|
||||
tpci200->slots[i].mem_phys.address =
|
||||
(void __iomem *)mem_base + TPCI200_MEM8_GAP*i;
|
||||
tpci200->slots[i].mem_phys.size = TPCI200_MEM8_SIZE;
|
||||
@ -391,6 +398,15 @@ static int tpci200_slot_unmap_space(struct ipack_device *dev, int space)
|
||||
}
|
||||
virt_addr_space = &dev->id_space;
|
||||
break;
|
||||
case IPACK_INT_SPACE:
|
||||
if (dev->int_space.address == NULL) {
|
||||
dev_info(&dev->dev,
|
||||
"Slot [%d:%d] INT space not mapped !\n",
|
||||
dev->bus_nr, dev->slot);
|
||||
goto out_unlock;
|
||||
}
|
||||
virt_addr_space = &dev->int_space;
|
||||
break;
|
||||
case IPACK_MEM_SPACE:
|
||||
if (dev->mem_space.address == NULL) {
|
||||
dev_info(&dev->dev,
|
||||
@ -460,6 +476,19 @@ static int tpci200_slot_map_space(struct ipack_device *dev,
|
||||
phys_address = tpci200->slots[dev->slot].id_phys.address;
|
||||
size_to_map = tpci200->slots[dev->slot].id_phys.size;
|
||||
break;
|
||||
case IPACK_INT_SPACE:
|
||||
if (dev->int_space.address != NULL) {
|
||||
dev_err(&dev->dev,
|
||||
"Slot [%d:%d] INT space already mapped !\n",
|
||||
tpci200->number, dev->slot);
|
||||
res = -EINVAL;
|
||||
goto out_unlock;
|
||||
}
|
||||
virt_addr_space = &dev->int_space;
|
||||
|
||||
phys_address = tpci200->slots[dev->slot].int_phys.address;
|
||||
size_to_map = tpci200->slots[dev->slot].int_phys.size;
|
||||
break;
|
||||
case IPACK_MEM_SPACE:
|
||||
if (dev->mem_space.address != NULL) {
|
||||
dev_err(&dev->dev,
|
||||
|
@ -132,6 +132,7 @@ struct slot_irq {
|
||||
* @irq Slot IRQ infos
|
||||
* @io_phys IO physical base address register of the slot
|
||||
* @id_phys ID physical base address register of the slot
|
||||
* @int_phys INT physical base address register of the slot
|
||||
* @mem_phys MEM physical base address register of the slot
|
||||
*
|
||||
*/
|
||||
@ -139,6 +140,7 @@ struct tpci200_slot {
|
||||
struct slot_irq *irq;
|
||||
struct ipack_addr_space io_phys;
|
||||
struct ipack_addr_space id_phys;
|
||||
struct ipack_addr_space int_phys;
|
||||
struct ipack_addr_space mem_phys;
|
||||
};
|
||||
|
||||
|
@ -35,6 +35,7 @@ enum ipack_space {
|
||||
IPACK_IO_SPACE = 0,
|
||||
IPACK_ID_SPACE = 1,
|
||||
IPACK_MEM_SPACE = 2,
|
||||
IPACK_INT_SPACE,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -71,6 +72,7 @@ struct ipack_device {
|
||||
struct ipack_bus_device *bus;
|
||||
struct ipack_addr_space id_space;
|
||||
struct ipack_addr_space io_space;
|
||||
struct ipack_addr_space int_space;
|
||||
struct ipack_addr_space mem_space;
|
||||
struct device dev;
|
||||
u8 *id;
|
||||
|
Loading…
Reference in New Issue
Block a user