18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _ASM_PARISC_PARISC_DEVICE_H_ 38c2ecf20Sopenharmony_ci#define _ASM_PARISC_PARISC_DEVICE_H_ 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <linux/device.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cistruct parisc_device { 88c2ecf20Sopenharmony_ci struct resource hpa; /* Hard Physical Address */ 98c2ecf20Sopenharmony_ci struct parisc_device_id id; 108c2ecf20Sopenharmony_ci struct parisc_driver *driver; /* Driver for this device */ 118c2ecf20Sopenharmony_ci char name[80]; /* The hardware description */ 128c2ecf20Sopenharmony_ci int irq; 138c2ecf20Sopenharmony_ci int aux_irq; /* Some devices have a second IRQ */ 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci char hw_path; /* The module number on this bus */ 168c2ecf20Sopenharmony_ci unsigned int num_addrs; /* some devices have additional address ranges. */ 178c2ecf20Sopenharmony_ci unsigned long *addr; /* which will be stored here */ 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#ifdef CONFIG_64BIT 208c2ecf20Sopenharmony_ci /* parms for pdc_pat_cell_module() call */ 218c2ecf20Sopenharmony_ci unsigned long pcell_loc; /* Physical Cell location */ 228c2ecf20Sopenharmony_ci unsigned long mod_index; /* PAT specific - Misc Module info */ 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci /* generic info returned from pdc_pat_cell_module() */ 258c2ecf20Sopenharmony_ci unsigned long mod_info; /* PAT specific - Misc Module info */ 268c2ecf20Sopenharmony_ci unsigned long pmod_loc; /* physical Module location */ 278c2ecf20Sopenharmony_ci unsigned long mod0; 288c2ecf20Sopenharmony_ci#endif 298c2ecf20Sopenharmony_ci u64 dma_mask; /* DMA mask for I/O */ 308c2ecf20Sopenharmony_ci struct device dev; 318c2ecf20Sopenharmony_ci}; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cistruct parisc_driver { 348c2ecf20Sopenharmony_ci struct parisc_driver *next; 358c2ecf20Sopenharmony_ci char *name; 368c2ecf20Sopenharmony_ci const struct parisc_device_id *id_table; 378c2ecf20Sopenharmony_ci int (*probe) (struct parisc_device *dev); /* New device discovered */ 388c2ecf20Sopenharmony_ci int (*remove) (struct parisc_device *dev); 398c2ecf20Sopenharmony_ci struct device_driver drv; 408c2ecf20Sopenharmony_ci}; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define to_parisc_device(d) container_of(d, struct parisc_device, dev) 448c2ecf20Sopenharmony_ci#define to_parisc_driver(d) container_of(d, struct parisc_driver, drv) 458c2ecf20Sopenharmony_ci#define parisc_parent(d) to_parisc_device(d->dev.parent) 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_cistatic inline const char *parisc_pathname(struct parisc_device *d) 488c2ecf20Sopenharmony_ci{ 498c2ecf20Sopenharmony_ci return dev_name(&d->dev); 508c2ecf20Sopenharmony_ci} 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_cistatic inline void 538c2ecf20Sopenharmony_ciparisc_set_drvdata(struct parisc_device *d, void *p) 548c2ecf20Sopenharmony_ci{ 558c2ecf20Sopenharmony_ci dev_set_drvdata(&d->dev, p); 568c2ecf20Sopenharmony_ci} 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_cistatic inline void * 598c2ecf20Sopenharmony_ciparisc_get_drvdata(struct parisc_device *d) 608c2ecf20Sopenharmony_ci{ 618c2ecf20Sopenharmony_ci return dev_get_drvdata(&d->dev); 628c2ecf20Sopenharmony_ci} 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_ciextern struct bus_type parisc_bus_type; 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ciint iosapic_serial_irq(struct parisc_device *dev); 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_ci#endif /*_ASM_PARISC_PARISC_DEVICE_H_*/ 69