|
@@ -980,28 +980,38 @@ static void
|
|
lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|
lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|
{
|
|
{
|
|
unsigned long bytecnt;
|
|
unsigned long bytecnt;
|
|
- pdc_pat_cell_mod_maddr_block_t pa_pdc_cell; /* PA_VIEW */
|
|
|
|
- pdc_pat_cell_mod_maddr_block_t io_pdc_cell; /* IO_VIEW */
|
|
|
|
long io_count;
|
|
long io_count;
|
|
long status; /* PDC return status */
|
|
long status; /* PDC return status */
|
|
long pa_count;
|
|
long pa_count;
|
|
|
|
+ pdc_pat_cell_mod_maddr_block_t *pa_pdc_cell; /* PA_VIEW */
|
|
|
|
+ pdc_pat_cell_mod_maddr_block_t *io_pdc_cell; /* IO_VIEW */
|
|
int i;
|
|
int i;
|
|
|
|
|
|
|
|
+ pa_pdc_cell = kzalloc(sizeof(pdc_pat_cell_mod_maddr_block_t), GFP_KERNEL);
|
|
|
|
+ if (!pa_pdc_cell)
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ io_pdc_cell = kzalloc(sizeof(pdc_pat_cell_mod_maddr_block_t), GFP_KERNEL);
|
|
|
|
+ if (!pa_pdc_cell) {
|
|
|
|
+ kfree(pa_pdc_cell);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
/* return cell module (IO view) */
|
|
/* return cell module (IO view) */
|
|
status = pdc_pat_cell_module(&bytecnt, pa_dev->pcell_loc, pa_dev->mod_index,
|
|
status = pdc_pat_cell_module(&bytecnt, pa_dev->pcell_loc, pa_dev->mod_index,
|
|
- PA_VIEW, & pa_pdc_cell);
|
|
|
|
- pa_count = pa_pdc_cell.mod[1];
|
|
|
|
|
|
+ PA_VIEW, pa_pdc_cell);
|
|
|
|
+ pa_count = pa_pdc_cell->mod[1];
|
|
|
|
|
|
status |= pdc_pat_cell_module(&bytecnt, pa_dev->pcell_loc, pa_dev->mod_index,
|
|
status |= pdc_pat_cell_module(&bytecnt, pa_dev->pcell_loc, pa_dev->mod_index,
|
|
- IO_VIEW, &io_pdc_cell);
|
|
|
|
- io_count = io_pdc_cell.mod[1];
|
|
|
|
|
|
+ IO_VIEW, io_pdc_cell);
|
|
|
|
+ io_count = io_pdc_cell->mod[1];
|
|
|
|
|
|
/* We've already done this once for device discovery...*/
|
|
/* We've already done this once for device discovery...*/
|
|
if (status != PDC_OK) {
|
|
if (status != PDC_OK) {
|
|
panic("pdc_pat_cell_module() call failed for LBA!\n");
|
|
panic("pdc_pat_cell_module() call failed for LBA!\n");
|
|
}
|
|
}
|
|
|
|
|
|
- if (PAT_GET_ENTITY(pa_pdc_cell.mod_info) != PAT_ENTITY_LBA) {
|
|
|
|
|
|
+ if (PAT_GET_ENTITY(pa_pdc_cell->mod_info) != PAT_ENTITY_LBA) {
|
|
panic("pdc_pat_cell_module() entity returned != PAT_ENTITY_LBA!\n");
|
|
panic("pdc_pat_cell_module() entity returned != PAT_ENTITY_LBA!\n");
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1016,8 +1026,8 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|
} *p, *io;
|
|
} *p, *io;
|
|
struct resource *r;
|
|
struct resource *r;
|
|
|
|
|
|
- p = (void *) &(pa_pdc_cell.mod[2+i*3]);
|
|
|
|
- io = (void *) &(io_pdc_cell.mod[2+i*3]);
|
|
|
|
|
|
+ p = (void *) &(pa_pdc_cell->mod[2+i*3]);
|
|
|
|
+ io = (void *) &(io_pdc_cell->mod[2+i*3]);
|
|
|
|
|
|
/* Convert the PAT range data to PCI "struct resource" */
|
|
/* Convert the PAT range data to PCI "struct resource" */
|
|
switch(p->type & 0xff) {
|
|
switch(p->type & 0xff) {
|
|
@@ -1096,6 +1106,9 @@ lba_pat_resources(struct parisc_device *pa_dev, struct lba_device *lba_dev)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ kfree(pa_pdc_cell);
|
|
|
|
+ kfree(io_pdc_cell);
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
/* keep compiler from complaining about missing declarations */
|
|
/* keep compiler from complaining about missing declarations */
|