Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 337033
b: refs/heads/master
c: a93963a
h: refs/heads/master
i:
  337031: 33e8777
v: v3
  • Loading branch information
Jens Taprogge authored and Greg Kroah-Hartman committed Oct 19, 2012
1 parent 29bed5c commit f9df493
Show file tree
Hide file tree
Showing 4 changed files with 2 additions and 221 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 402228dbe395bf17e38d5a23a9d6aa18f8705899
refs/heads/master: a93963ab01519cf56c5a5d36eebb077db4059eac
200 changes: 1 addition & 199 deletions trunk/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 trunk/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 trunk/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 f9df493

Please sign in to comment.