mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	parisc: Use signed char for hardware path in pdc.h
Clean up the struct for hardware_path and drop the struct device_path with a proper assignment of bc[] and mod members as signed chars. This patch prepares for the kbuild change from Jason A. Donenfeld to treat char as always unsigned. Signed-off-by: Helge Deller <deller@gmx.de> Cc: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
		
							parent
							
								
									9e4e2ce1a7
								
							
						
					
					
						commit
						50f19697dd
					
				
					 2 changed files with 30 additions and 40 deletions
				
			
		| 
						 | 
					@ -363,20 +363,25 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if !defined(__ASSEMBLY__)
 | 
					#if !defined(__ASSEMBLY__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* flags of the device_path */
 | 
					/* flags for hardware_path */
 | 
				
			||||||
#define	PF_AUTOBOOT	0x80
 | 
					#define	PF_AUTOBOOT	0x80
 | 
				
			||||||
#define	PF_AUTOSEARCH	0x40
 | 
					#define	PF_AUTOSEARCH	0x40
 | 
				
			||||||
#define	PF_TIMER	0x0F
 | 
					#define	PF_TIMER	0x0F
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct device_path {		/* page 1-69 */
 | 
					struct hardware_path {
 | 
				
			||||||
	unsigned char flags;	/* flags see above! */
 | 
						unsigned char flags;	/* see bit definitions below */
 | 
				
			||||||
	unsigned char bc[6];	/* bus converter routing info */
 | 
						signed   char bc[6];	/* Bus Converter routing info to a specific */
 | 
				
			||||||
	unsigned char mod;
 | 
									/* I/O adaptor (< 0 means none, > 63 resvd) */
 | 
				
			||||||
	unsigned int  layers[6];/* device-specific layer-info */
 | 
						signed   char mod;	/* fixed field of specified module */
 | 
				
			||||||
} __attribute__((aligned(8))) ;
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct pdc_module_path {	/* page 1-69 */
 | 
				
			||||||
 | 
						struct hardware_path path;
 | 
				
			||||||
 | 
						unsigned int layers[6]; /* device-specific info (ctlr #, unit # ...) */
 | 
				
			||||||
 | 
					} __attribute__((aligned(8)));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct pz_device {
 | 
					struct pz_device {
 | 
				
			||||||
	struct	device_path dp;	/* see above */
 | 
						struct pdc_module_path dp;	/* see above */
 | 
				
			||||||
	/* struct	iomod *hpa; */
 | 
						/* struct	iomod *hpa; */
 | 
				
			||||||
	unsigned int hpa;	/* HPA base address */
 | 
						unsigned int hpa;	/* HPA base address */
 | 
				
			||||||
	/* char	*spa; */
 | 
						/* char	*spa; */
 | 
				
			||||||
| 
						 | 
					@ -611,21 +616,6 @@ struct pdc_initiator { /* PDC_INITIATOR */
 | 
				
			||||||
	int mode;
 | 
						int mode;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct hardware_path {
 | 
					 | 
				
			||||||
	char  flags;	/* see bit definitions below */
 | 
					 | 
				
			||||||
	char  bc[6];	/* Bus Converter routing info to a specific */
 | 
					 | 
				
			||||||
			/* I/O adaptor (< 0 means none, > 63 resvd) */
 | 
					 | 
				
			||||||
	char  mod;	/* fixed field of specified module */
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * Device path specifications used by PDC.
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
struct pdc_module_path {
 | 
					 | 
				
			||||||
	struct hardware_path path;
 | 
					 | 
				
			||||||
	unsigned int layers[6]; /* device-specific info (ctlr #, unit # ...) */
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/* Only used on some pre-PA2.0 boxes */
 | 
					/* Only used on some pre-PA2.0 boxes */
 | 
				
			||||||
struct pdc_memory_map {		/* PDC_MEMORY_MAP */
 | 
					struct pdc_memory_map {		/* PDC_MEMORY_MAP */
 | 
				
			||||||
	unsigned long hpa;	/* mod's register set address */
 | 
						unsigned long hpa;	/* mod's register set address */
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,7 +14,7 @@
 | 
				
			||||||
 *    all) PA-RISC machines should have them. Anyway, for safety reasons, the
 | 
					 *    all) PA-RISC machines should have them. Anyway, for safety reasons, the
 | 
				
			||||||
 *    following code can deal with just 96 bytes of Stable Storage, and all
 | 
					 *    following code can deal with just 96 bytes of Stable Storage, and all
 | 
				
			||||||
 *    sizes between 96 and 192 bytes (provided they are multiple of struct
 | 
					 *    sizes between 96 and 192 bytes (provided they are multiple of struct
 | 
				
			||||||
 *    device_path size, eg: 128, 160 and 192) to provide full information.
 | 
					 *    pdc_module_path size, eg: 128, 160 and 192) to provide full information.
 | 
				
			||||||
 *    One last word: there's one path we can always count on: the primary path.
 | 
					 *    One last word: there's one path we can always count on: the primary path.
 | 
				
			||||||
 *    Anything above 224 bytes is used for 'osdep2' OS-dependent storage area.
 | 
					 *    Anything above 224 bytes is used for 'osdep2' OS-dependent storage area.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ struct pdcspath_entry {
 | 
				
			||||||
	short ready;			/* entry record is valid if != 0 */
 | 
						short ready;			/* entry record is valid if != 0 */
 | 
				
			||||||
	unsigned long addr;		/* entry address in stable storage */
 | 
						unsigned long addr;		/* entry address in stable storage */
 | 
				
			||||||
	char *name;			/* entry name */
 | 
						char *name;			/* entry name */
 | 
				
			||||||
	struct device_path devpath;	/* device path in parisc representation */
 | 
						struct pdc_module_path devpath;	/* device path in parisc representation */
 | 
				
			||||||
	struct device *dev;		/* corresponding device */
 | 
						struct device *dev;		/* corresponding device */
 | 
				
			||||||
	struct kobject kobj;
 | 
						struct kobject kobj;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -138,7 +138,7 @@ struct pdcspath_attribute paths_attr_##_name = { \
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
pdcspath_fetch(struct pdcspath_entry *entry)
 | 
					pdcspath_fetch(struct pdcspath_entry *entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct device_path *devpath;
 | 
						struct pdc_module_path *devpath;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!entry)
 | 
						if (!entry)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
| 
						 | 
					@ -153,7 +153,7 @@ pdcspath_fetch(struct pdcspath_entry *entry)
 | 
				
			||||||
		return -EIO;
 | 
							return -EIO;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	/* Find the matching device.
 | 
						/* Find the matching device.
 | 
				
			||||||
	   NOTE: hardware_path overlays with device_path, so the nice cast can
 | 
						   NOTE: hardware_path overlays with pdc_module_path, so the nice cast can
 | 
				
			||||||
	   be used */
 | 
						   be used */
 | 
				
			||||||
	entry->dev = hwpath_to_device((struct hardware_path *)devpath);
 | 
						entry->dev = hwpath_to_device((struct hardware_path *)devpath);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -179,7 +179,7 @@ pdcspath_fetch(struct pdcspath_entry *entry)
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
pdcspath_store(struct pdcspath_entry *entry)
 | 
					pdcspath_store(struct pdcspath_entry *entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct device_path *devpath;
 | 
						struct pdc_module_path *devpath;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	BUG_ON(!entry);
 | 
						BUG_ON(!entry);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -221,7 +221,7 @@ static ssize_t
 | 
				
			||||||
pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
 | 
					pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char *out = buf;
 | 
						char *out = buf;
 | 
				
			||||||
	struct device_path *devpath;
 | 
						struct pdc_module_path *devpath;
 | 
				
			||||||
	short i;
 | 
						short i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!entry || !buf)
 | 
						if (!entry || !buf)
 | 
				
			||||||
| 
						 | 
					@ -236,11 +236,11 @@ pdcspath_hwpath_read(struct pdcspath_entry *entry, char *buf)
 | 
				
			||||||
		return -ENODATA;
 | 
							return -ENODATA;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	for (i = 0; i < 6; i++) {
 | 
						for (i = 0; i < 6; i++) {
 | 
				
			||||||
		if (devpath->bc[i] >= 128)
 | 
							if (devpath->path.bc[i] < 0)
 | 
				
			||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		out += sprintf(out, "%u/", (unsigned char)devpath->bc[i]);
 | 
							out += sprintf(out, "%d/", devpath->path.bc[i]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	out += sprintf(out, "%u\n", (unsigned char)devpath->mod);
 | 
						out += sprintf(out, "%u\n", (unsigned char)devpath->path.mod);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	return out - buf;
 | 
						return out - buf;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -296,12 +296,12 @@ pdcspath_hwpath_write(struct pdcspath_entry *entry, const char *buf, size_t coun
 | 
				
			||||||
	for (i=5; ((temp = strrchr(in, '/'))) && (temp-in > 0) && (likely(i)); i--) {
 | 
						for (i=5; ((temp = strrchr(in, '/'))) && (temp-in > 0) && (likely(i)); i--) {
 | 
				
			||||||
		hwpath.bc[i] = simple_strtoul(temp+1, NULL, 10);
 | 
							hwpath.bc[i] = simple_strtoul(temp+1, NULL, 10);
 | 
				
			||||||
		in[temp-in] = '\0';
 | 
							in[temp-in] = '\0';
 | 
				
			||||||
		DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.bc[i]);
 | 
							DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.path.bc[i]);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/* Store the final field */		
 | 
						/* Store the final field */		
 | 
				
			||||||
	hwpath.bc[i] = simple_strtoul(in, NULL, 10);
 | 
						hwpath.bc[i] = simple_strtoul(in, NULL, 10);
 | 
				
			||||||
	DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.bc[i]);
 | 
						DPRINTK("%s: bc[%d]: %d\n", __func__, i, hwpath.path.bc[i]);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/* Now we check that the user isn't trying to lure us */
 | 
						/* Now we check that the user isn't trying to lure us */
 | 
				
			||||||
	if (!(dev = hwpath_to_device((struct hardware_path *)&hwpath))) {
 | 
						if (!(dev = hwpath_to_device((struct hardware_path *)&hwpath))) {
 | 
				
			||||||
| 
						 | 
					@ -342,7 +342,7 @@ static ssize_t
 | 
				
			||||||
pdcspath_layer_read(struct pdcspath_entry *entry, char *buf)
 | 
					pdcspath_layer_read(struct pdcspath_entry *entry, char *buf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	char *out = buf;
 | 
						char *out = buf;
 | 
				
			||||||
	struct device_path *devpath;
 | 
						struct pdc_module_path *devpath;
 | 
				
			||||||
	short i;
 | 
						short i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!entry || !buf)
 | 
						if (!entry || !buf)
 | 
				
			||||||
| 
						 | 
					@ -547,7 +547,7 @@ static ssize_t pdcs_auto_read(struct kobject *kobj,
 | 
				
			||||||
	pathentry = &pdcspath_entry_primary;
 | 
						pathentry = &pdcspath_entry_primary;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	read_lock(&pathentry->rw_lock);
 | 
						read_lock(&pathentry->rw_lock);
 | 
				
			||||||
	out += sprintf(out, "%s\n", (pathentry->devpath.flags & knob) ?
 | 
						out += sprintf(out, "%s\n", (pathentry->devpath.path.flags & knob) ?
 | 
				
			||||||
					"On" : "Off");
 | 
										"On" : "Off");
 | 
				
			||||||
	read_unlock(&pathentry->rw_lock);
 | 
						read_unlock(&pathentry->rw_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -594,8 +594,8 @@ static ssize_t pdcs_timer_read(struct kobject *kobj,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* print the timer value in seconds */
 | 
						/* print the timer value in seconds */
 | 
				
			||||||
	read_lock(&pathentry->rw_lock);
 | 
						read_lock(&pathentry->rw_lock);
 | 
				
			||||||
	out += sprintf(out, "%u\n", (pathentry->devpath.flags & PF_TIMER) ?
 | 
						out += sprintf(out, "%u\n", (pathentry->devpath.path.flags & PF_TIMER) ?
 | 
				
			||||||
				(1 << (pathentry->devpath.flags & PF_TIMER)) : 0);
 | 
									(1 << (pathentry->devpath.path.flags & PF_TIMER)) : 0);
 | 
				
			||||||
	read_unlock(&pathentry->rw_lock);
 | 
						read_unlock(&pathentry->rw_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return out - buf;
 | 
						return out - buf;
 | 
				
			||||||
| 
						 | 
					@ -764,7 +764,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj,
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/* Be nice to the existing flag record */
 | 
						/* Be nice to the existing flag record */
 | 
				
			||||||
	read_lock(&pathentry->rw_lock);
 | 
						read_lock(&pathentry->rw_lock);
 | 
				
			||||||
	flags = pathentry->devpath.flags;
 | 
						flags = pathentry->devpath.path.flags;
 | 
				
			||||||
	read_unlock(&pathentry->rw_lock);
 | 
						read_unlock(&pathentry->rw_lock);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	DPRINTK("%s: flags before: 0x%X\n", __func__, flags);
 | 
						DPRINTK("%s: flags before: 0x%X\n", __func__, flags);
 | 
				
			||||||
| 
						 | 
					@ -785,7 +785,7 @@ static ssize_t pdcs_auto_write(struct kobject *kobj,
 | 
				
			||||||
	write_lock(&pathentry->rw_lock);
 | 
						write_lock(&pathentry->rw_lock);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	/* Change the path entry flags first */
 | 
						/* Change the path entry flags first */
 | 
				
			||||||
	pathentry->devpath.flags = flags;
 | 
						pathentry->devpath.path.flags = flags;
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
	/* Now, dive in. Write back to the hardware */
 | 
						/* Now, dive in. Write back to the hardware */
 | 
				
			||||||
	pdcspath_store(pathentry);
 | 
						pdcspath_store(pathentry);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue