xref: /OK3568_Linux_fs/kernel/arch/parisc/include/asm/hardware.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef _PARISC_HARDWARE_H
3*4882a593Smuzhiyun #define _PARISC_HARDWARE_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #include <linux/mod_devicetable.h>
6*4882a593Smuzhiyun 
7*4882a593Smuzhiyun #define HWTYPE_ANY_ID		PA_HWTYPE_ANY_ID
8*4882a593Smuzhiyun #define HVERSION_ANY_ID		PA_HVERSION_ANY_ID
9*4882a593Smuzhiyun #define HVERSION_REV_ANY_ID	PA_HVERSION_REV_ANY_ID
10*4882a593Smuzhiyun #define SVERSION_ANY_ID		PA_SVERSION_ANY_ID
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun struct hp_hardware {
13*4882a593Smuzhiyun 	unsigned int	hw_type:8;	/* HPHW_xxx */
14*4882a593Smuzhiyun 	unsigned int	hversion:12;
15*4882a593Smuzhiyun 	unsigned int	sversion:12;
16*4882a593Smuzhiyun 	unsigned char	opt;
17*4882a593Smuzhiyun 	unsigned char	name[59];	/* The hardware description */
18*4882a593Smuzhiyun } __packed;
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun struct parisc_device;
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun enum cpu_type {
23*4882a593Smuzhiyun 	pcx	= 0, /* pa7000		pa 1.0  */
24*4882a593Smuzhiyun 	pcxs	= 1, /* pa7000		pa 1.1a */
25*4882a593Smuzhiyun 	pcxt	= 2, /* pa7100		pa 1.1b */
26*4882a593Smuzhiyun 	pcxt_	= 3, /* pa7200	(t')	pa 1.1c */
27*4882a593Smuzhiyun 	pcxl	= 4, /* pa7100lc	pa 1.1d */
28*4882a593Smuzhiyun 	pcxl2	= 5, /* pa7300lc	pa 1.1e */
29*4882a593Smuzhiyun 	pcxu	= 6, /* pa8000		pa 2.0  */
30*4882a593Smuzhiyun 	pcxu_	= 7, /* pa8200	(u+)	pa 2.0  */
31*4882a593Smuzhiyun 	pcxw	= 8, /* pa8500		pa 2.0  */
32*4882a593Smuzhiyun 	pcxw_	= 9, /* pa8600	(w+)	pa 2.0  */
33*4882a593Smuzhiyun 	pcxw2	= 10, /* pa8700		pa 2.0  */
34*4882a593Smuzhiyun 	mako	= 11, /* pa8800		pa 2.0  */
35*4882a593Smuzhiyun 	mako2	= 12  /* pa8900		pa 2.0  */
36*4882a593Smuzhiyun };
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun extern const char * const cpu_name_version[][2]; /* mapping from enum cpu_type to strings */
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun struct parisc_driver;
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun struct io_module {
43*4882a593Smuzhiyun         volatile uint32_t nothing;		/* reg 0 */
44*4882a593Smuzhiyun         volatile uint32_t io_eim;
45*4882a593Smuzhiyun         volatile uint32_t io_dc_adata;
46*4882a593Smuzhiyun         volatile uint32_t io_ii_cdata;
47*4882a593Smuzhiyun         volatile uint32_t io_dma_link;		/* reg 4 */
48*4882a593Smuzhiyun         volatile uint32_t io_dma_command;
49*4882a593Smuzhiyun         volatile uint32_t io_dma_address;
50*4882a593Smuzhiyun         volatile uint32_t io_dma_count;
51*4882a593Smuzhiyun         volatile uint32_t io_flex;		/* reg 8 */
52*4882a593Smuzhiyun         volatile uint32_t io_spa_address;
53*4882a593Smuzhiyun         volatile uint32_t reserved1[2];
54*4882a593Smuzhiyun         volatile uint32_t io_command;		/* reg 12 */
55*4882a593Smuzhiyun         volatile uint32_t io_status;
56*4882a593Smuzhiyun         volatile uint32_t io_control;
57*4882a593Smuzhiyun         volatile uint32_t io_data;
58*4882a593Smuzhiyun         volatile uint32_t reserved2;		/* reg 16 */
59*4882a593Smuzhiyun         volatile uint32_t chain_addr;
60*4882a593Smuzhiyun         volatile uint32_t sub_mask_clr;
61*4882a593Smuzhiyun         volatile uint32_t reserved3[13];
62*4882a593Smuzhiyun         volatile uint32_t undefined[480];
63*4882a593Smuzhiyun         volatile uint32_t unpriv[512];
64*4882a593Smuzhiyun };
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun struct bc_module {
67*4882a593Smuzhiyun         volatile uint32_t unused1[12];
68*4882a593Smuzhiyun         volatile uint32_t io_command;
69*4882a593Smuzhiyun         volatile uint32_t io_status;
70*4882a593Smuzhiyun         volatile uint32_t io_control;
71*4882a593Smuzhiyun         volatile uint32_t unused2[1];
72*4882a593Smuzhiyun         volatile uint32_t io_err_resp;
73*4882a593Smuzhiyun         volatile uint32_t io_err_info;
74*4882a593Smuzhiyun         volatile uint32_t io_err_req;
75*4882a593Smuzhiyun         volatile uint32_t unused3[11];
76*4882a593Smuzhiyun         volatile uint32_t io_io_low;
77*4882a593Smuzhiyun         volatile uint32_t io_io_high;
78*4882a593Smuzhiyun };
79*4882a593Smuzhiyun 
80*4882a593Smuzhiyun #define HPHW_NPROC     0
81*4882a593Smuzhiyun #define HPHW_MEMORY    1
82*4882a593Smuzhiyun #define HPHW_B_DMA     2
83*4882a593Smuzhiyun #define HPHW_OBSOLETE  3
84*4882a593Smuzhiyun #define HPHW_A_DMA     4
85*4882a593Smuzhiyun #define HPHW_A_DIRECT  5
86*4882a593Smuzhiyun #define HPHW_OTHER     6
87*4882a593Smuzhiyun #define HPHW_BCPORT    7
88*4882a593Smuzhiyun #define HPHW_CIO       8
89*4882a593Smuzhiyun #define HPHW_CONSOLE   9
90*4882a593Smuzhiyun #define HPHW_FIO       10
91*4882a593Smuzhiyun #define HPHW_BA        11
92*4882a593Smuzhiyun #define HPHW_IOA       12
93*4882a593Smuzhiyun #define HPHW_BRIDGE    13
94*4882a593Smuzhiyun #define HPHW_FABRIC    14
95*4882a593Smuzhiyun #define HPHW_MC	       15
96*4882a593Smuzhiyun #define HPHW_FAULTY    31
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun struct parisc_device_id;
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun /* hardware.c: */
101*4882a593Smuzhiyun extern const char *parisc_hardware_description(struct parisc_device_id *id);
102*4882a593Smuzhiyun extern enum cpu_type parisc_get_cpu_type(unsigned long hversion);
103*4882a593Smuzhiyun 
104*4882a593Smuzhiyun struct pci_dev;
105*4882a593Smuzhiyun struct hardware_path;
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun /* drivers.c: */
108*4882a593Smuzhiyun extern struct parisc_device *alloc_pa_dev(unsigned long hpa,
109*4882a593Smuzhiyun 		struct hardware_path *path);
110*4882a593Smuzhiyun extern int register_parisc_device(struct parisc_device *dev);
111*4882a593Smuzhiyun extern int register_parisc_driver(struct parisc_driver *driver);
112*4882a593Smuzhiyun extern int count_parisc_driver(struct parisc_driver *driver);
113*4882a593Smuzhiyun extern int unregister_parisc_driver(struct parisc_driver *driver);
114*4882a593Smuzhiyun extern void walk_central_bus(void);
115*4882a593Smuzhiyun extern const struct parisc_device *find_pa_parent_type(const struct parisc_device *, int);
116*4882a593Smuzhiyun extern void print_parisc_devices(void);
117*4882a593Smuzhiyun extern char *print_pa_hwpath(struct parisc_device *dev, char *path);
118*4882a593Smuzhiyun extern char *print_pci_hwpath(struct pci_dev *dev, char *path);
119*4882a593Smuzhiyun extern void get_pci_node_path(struct pci_dev *dev, struct hardware_path *path);
120*4882a593Smuzhiyun extern void init_parisc_bus(void);
121*4882a593Smuzhiyun extern struct device *hwpath_to_device(struct hardware_path *modpath);
122*4882a593Smuzhiyun extern void device_to_hwpath(struct device *dev, struct hardware_path *path);
123*4882a593Smuzhiyun extern int machine_has_merced_bus(void);
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun /* inventory.c: */
126*4882a593Smuzhiyun extern void do_memory_inventory(void);
127*4882a593Smuzhiyun extern void do_device_inventory(void);
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun #endif /* _PARISC_HARDWARE_H */
130