Skip to content

Commit

Permalink
Staging: ipack: remove memory mapping callbacks.
Browse files Browse the repository at this point in the history
Now that we have the infrastructure to use the regular function in place
and all existing users are converted, remove the map and unmap callbacks
from the ipack_bus_device->ops.

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>
  • Loading branch information
Jens Taprogge authored and Greg Kroah-Hartman committed Oct 19, 2012
1 parent 402228d commit a93963a
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 220 deletions.
200 changes: 1 addition & 199 deletions drivers/staging/ipack/bridges/tpci200.c
Original file line number Diff line number Diff line change
Expand Up @@ -87,8 +87,6 @@ static void tpci200_set_mask(struct tpci200_board *tpci200,

static void tpci200_unregister(struct tpci200_board *tpci200)
{
int i;

free_irq(tpci200->info->pdev->irq, (void *) tpci200);

pci_iounmap(tpci200->info->pdev, tpci200->info->interface_regs);
Expand All @@ -101,17 +99,6 @@ static void tpci200_unregister(struct tpci200_board *tpci200)

pci_disable_device(tpci200->info->pdev);
pci_dev_put(tpci200->info->pdev);

for (i = 0; i < TPCI200_NB_SLOT; i++) {
tpci200->slots[i].io_phys.start = 0;
tpci200->slots[i].io_phys.size = 0;
tpci200->slots[i].id_phys.start = 0;
tpci200->slots[i].id_phys.size = 0;
tpci200->slots[i].int_phys.start = 0;
tpci200->slots[i].int_phys.size = 0;
tpci200->slots[i].mem_phys.start = 0;
tpci200->slots[i].mem_phys.size = 0;
}
}

static void tpci200_enable_irq(struct tpci200_board *tpci200,
Expand Down Expand Up @@ -323,31 +310,8 @@ static int tpci200_register(struct tpci200_board *tpci200)
* clock rate 8 MHz
*/
slot_ctrl = 0;

/* Set all slot physical address space */
for (i = 0; i < TPCI200_NB_SLOT; i++) {
tpci200->slots[i].io_phys.start =
tpci200->mod_mem[IPACK_IO_SPACE]
+ TPCI200_IO_SPACE_INTERVAL * i;
tpci200->slots[i].io_phys.size = TPCI200_IO_SPACE_SIZE;

tpci200->slots[i].id_phys.start =
tpci200->mod_mem[IPACK_ID_SPACE]
+ TPCI200_ID_SPACE_INTERVAL * i;
tpci200->slots[i].id_phys.size = TPCI200_ID_SPACE_SIZE;

tpci200->slots[i].int_phys.start =
tpci200->mod_mem[IPACK_INT_SPACE]
+ TPCI200_INT_SPACE_INTERVAL * i;
tpci200->slots[i].int_phys.size = TPCI200_INT_SPACE_SIZE;

tpci200->slots[i].mem_phys.start =
tpci200->mod_mem[IPACK_MEM_SPACE]
+ TPCI200_MEM8_SPACE_INTERVAL * i;
tpci200->slots[i].mem_phys.size = TPCI200_MEM8_SPACE_SIZE;

for (i = 0; i < TPCI200_NB_SLOT; i++)
writew(slot_ctrl, &tpci200->info->interface_regs->control[i]);
}

res = request_irq(tpci200->info->pdev->irq,
tpci200_interrupt, IRQF_SHARED,
Expand All @@ -371,166 +335,6 @@ static int tpci200_register(struct tpci200_board *tpci200)
return res;
}

static int tpci200_slot_unmap_space(struct ipack_device *dev, int space)
{
struct ipack_addr_space *virt_addr_space;
struct tpci200_board *tpci200;

tpci200 = check_slot(dev);
if (tpci200 == NULL)
return -EINVAL;

if (mutex_lock_interruptible(&tpci200->mutex))
return -ERESTARTSYS;

switch (space) {
case IPACK_IO_SPACE:
if (dev->io_space.address == NULL) {
dev_info(&dev->dev,
"Slot [%d:%d] IO space not mapped !\n",
dev->bus->bus_nr, dev->slot);
goto out_unlock;
}
virt_addr_space = &dev->io_space;
break;
case IPACK_ID_SPACE:
if (dev->id_space.address == NULL) {
dev_info(&dev->dev,
"Slot [%d:%d] ID space not mapped !\n",
dev->bus->bus_nr, dev->slot);
goto out_unlock;
}
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->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,
"Slot [%d:%d] MEM space not mapped !\n",
dev->bus->bus_nr, dev->slot);
goto out_unlock;
}
virt_addr_space = &dev->mem_space;
break;
default:
dev_err(&dev->dev,
"Slot [%d:%d] space number %d doesn't exist !\n",
dev->bus->bus_nr, dev->slot, space);
mutex_unlock(&tpci200->mutex);
return -EINVAL;
}

iounmap(virt_addr_space->address);

virt_addr_space->address = NULL;
virt_addr_space->size = 0;
out_unlock:
mutex_unlock(&tpci200->mutex);
return 0;
}

static int tpci200_slot_map_space(struct ipack_device *dev,
ssize_t memory_size, int space)
{
int res = 0;
size_t size_to_map;
phys_addr_t phys_address;
struct ipack_addr_space *virt_addr_space;
struct tpci200_board *tpci200;

tpci200 = check_slot(dev);
if (tpci200 == NULL)
return -EINVAL;

if (mutex_lock_interruptible(&tpci200->mutex))
return -ERESTARTSYS;

switch (space) {
case IPACK_IO_SPACE:
if (dev->io_space.address != NULL) {
dev_err(&dev->dev,
"Slot [%d:%d] IO space already mapped !\n",
tpci200->number, dev->slot);
res = -EINVAL;
goto out_unlock;
}
virt_addr_space = &dev->io_space;

phys_address = tpci200->slots[dev->slot].io_phys.start;
size_to_map = tpci200->slots[dev->slot].io_phys.size;
break;
case IPACK_ID_SPACE:
if (dev->id_space.address != NULL) {
dev_err(&dev->dev,
"Slot [%d:%d] ID space already mapped !\n",
tpci200->number, dev->slot);
res = -EINVAL;
goto out_unlock;
}
virt_addr_space = &dev->id_space;

phys_address = tpci200->slots[dev->slot].id_phys.start;
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.start;
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,
"Slot [%d:%d] MEM space already mapped !\n",
tpci200->number, dev->slot);
res = -EINVAL;
goto out_unlock;
}
virt_addr_space = &dev->mem_space;

if (memory_size > tpci200->slots[dev->slot].mem_phys.size) {
dev_err(&dev->dev,
"Slot [%d:%d] request is 0x%zX memory, only 0x%zX available !\n",
dev->bus->bus_nr, dev->slot, memory_size,
tpci200->slots[dev->slot].mem_phys.size);
res = -EINVAL;
goto out_unlock;
}

phys_address = tpci200->slots[dev->slot].mem_phys.start;
size_to_map = memory_size;
break;
default:
dev_err(&dev->dev, "Slot [%d:%d] space %d doesn't exist !\n",
tpci200->number, dev->slot, space);
res = -EINVAL;
goto out_unlock;
}

virt_addr_space->size = size_to_map;
virt_addr_space->address =
ioremap_nocache((unsigned long)phys_address, size_to_map);

out_unlock:
mutex_unlock(&tpci200->mutex);
return res;
}

static int tpci200_get_clockrate(struct ipack_device *dev)
{
struct tpci200_board *tpci200 = check_slot(dev);
Expand Down Expand Up @@ -618,8 +422,6 @@ static void tpci200_uninstall(struct tpci200_board *tpci200)
}

static const struct ipack_bus_ops tpci200_bus_ops = {
.map_space = tpci200_slot_map_space,
.unmap_space = tpci200_slot_unmap_space,
.request_irq = tpci200_request_irq,
.free_irq = tpci200_free_irq,
.get_clockrate = tpci200_get_clockrate,
Expand Down
4 changes: 0 additions & 4 deletions drivers/staging/ipack/bridges/tpci200.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,10 +138,6 @@ struct slot_irq {
*/
struct tpci200_slot {
struct slot_irq *irq;
struct ipack_region io_phys;
struct ipack_region id_phys;
struct ipack_region int_phys;
struct ipack_region mem_phys;
};

/**
Expand Down
17 changes: 0 additions & 17 deletions drivers/staging/ipack/ipack.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,17 +41,6 @@ enum ipack_space {
IPACK_SPACE_COUNT,
};

/**
* struct ipack_addr_space - Virtual address space mapped for a specified type.
*
* @address: virtual address
* @size: size of the mapped space
*/
struct ipack_addr_space {
void __iomem *address;
unsigned int size;
};

/**
*/
struct ipack_region {
Expand All @@ -76,10 +65,6 @@ struct ipack_region {
struct ipack_device {
unsigned int slot;
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;
void (*release) (struct ipack_device *dev);
struct ipack_region region[IPACK_SPACE_COUNT];
Expand Down Expand Up @@ -135,8 +120,6 @@ struct ipack_driver {
* @reset_timeout: Resets the state returned by get_timeout.
*/
struct ipack_bus_ops {
int (*map_space) (struct ipack_device *dev, ssize_t memory_size, int space);
int (*unmap_space) (struct ipack_device *dev, int space);
int (*request_irq) (struct ipack_device *dev,
irqreturn_t (*handler)(void *), void *arg);
int (*free_irq) (struct ipack_device *dev);
Expand Down

0 comments on commit a93963a

Please sign in to comment.