diff options
Diffstat (limited to 'arch/parisc/kernel/firmware.c')
| -rw-r--r-- | arch/parisc/kernel/firmware.c | 57 | 
1 files changed, 57 insertions, 0 deletions
diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c index 6d471c00c71a..e6f3b49f2fd7 100644 --- a/arch/parisc/kernel/firmware.c +++ b/arch/parisc/kernel/firmware.c @@ -1326,6 +1326,36 @@ int pdc_pat_cell_module(unsigned long *actcnt, unsigned long ploc, unsigned long  }  /** + * pdc_pat_cell_info - Retrieve the cell's information. + * @info: The pointer to a struct pdc_pat_cell_info_rtn_block. + * @actcnt: The number of bytes which should be written to info. + * @offset: offset of the structure. + * @cell_number: The cell number which should be asked, or -1 for current cell. + * + * This PDC call returns information about the given cell (or all cells). + */ +int pdc_pat_cell_info(struct pdc_pat_cell_info_rtn_block *info, +		unsigned long *actcnt, unsigned long offset, +		unsigned long cell_number) +{ +	int retval; +	unsigned long flags; +	struct pdc_pat_cell_info_rtn_block result; + +	spin_lock_irqsave(&pdc_lock, flags); +	retval = mem_pdc_call(PDC_PAT_CELL, PDC_PAT_CELL_GET_INFO, +			__pa(pdc_result), __pa(&result), *actcnt, +			offset, cell_number); +	if (!retval) { +		*actcnt = pdc_result[0]; +		memcpy(info, &result, *actcnt); +	} +	spin_unlock_irqrestore(&pdc_lock, flags); + +	return retval; +} + +/**   * pdc_pat_cpu_get_number - Retrieve the cpu number.   * @cpu_info: The return buffer.   * @hpa: The Hard Physical Address of the CPU. @@ -1413,6 +1443,33 @@ int pdc_pat_pd_get_addr_map(unsigned long *actual_len, void *mem_addr,  }  /** + * pdc_pat_pd_get_PDC_interface_revisions - Retrieve PDC interface revisions. + * @legacy_rev: The legacy revision. + * @pat_rev: The PAT revision. + * @pdc_cap: The PDC capabilities. + * + */ +int pdc_pat_pd_get_pdc_revisions(unsigned long *legacy_rev, +		unsigned long *pat_rev, unsigned long *pdc_cap) +{ +	int retval; +	unsigned long flags; + +	spin_lock_irqsave(&pdc_lock, flags); +	retval = mem_pdc_call(PDC_PAT_PD, PDC_PAT_PD_GET_PDC_INTERF_REV, +				__pa(pdc_result)); +	if (retval == PDC_OK) { +		*legacy_rev = pdc_result[0]; +		*pat_rev = pdc_result[1]; +		*pdc_cap = pdc_result[2]; +	} +	spin_unlock_irqrestore(&pdc_lock, flags); + +	return retval; +} + + +/**   * pdc_pat_io_pci_cfg_read - Read PCI configuration space.   * @pci_addr: PCI configuration space address for which the read request is being made.   * @pci_size: Size of read in bytes. Valid values are 1, 2, and 4.   | 
