mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 14:30:50 +00:00 
			
		
		
		
	 708d4f0964
			
		
	
	
		708d4f0964
		
	
	
	
	
		
			
			- rename files where sparc64 uses identical names to *_32.c - refactor Makefile (but keep linking order) Signed-off-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: David S. Miller <davem@davemloft.net>
		
			
				
	
	
		
			90 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * devops.c:  Device operations using the PROM.
 | |
|  *
 | |
|  * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
 | |
|  */
 | |
| #include <linux/types.h>
 | |
| #include <linux/kernel.h>
 | |
| #include <linux/sched.h>
 | |
| 
 | |
| #include <asm/openprom.h>
 | |
| #include <asm/oplib.h>
 | |
| 
 | |
| extern void restore_current(void);
 | |
| 
 | |
| /* Open the device described by the string 'dstr'.  Returns the handle
 | |
|  * to that device used for subsequent operations on that device.
 | |
|  * Returns -1 on failure.
 | |
|  */
 | |
| int
 | |
| prom_devopen(char *dstr)
 | |
| {
 | |
| 	int handle;
 | |
| 	unsigned long flags;
 | |
| 	spin_lock_irqsave(&prom_lock, flags);
 | |
| 	switch(prom_vers) {
 | |
| 	case PROM_V0:
 | |
| 		handle = (*(romvec->pv_v0devops.v0_devopen))(dstr);
 | |
| 		if(handle == 0) handle = -1;
 | |
| 		break;
 | |
| 	case PROM_V2:
 | |
| 	case PROM_V3:
 | |
| 		handle = (*(romvec->pv_v2devops.v2_dev_open))(dstr);
 | |
| 		break;
 | |
| 	default:
 | |
| 		handle = -1;
 | |
| 		break;
 | |
| 	};
 | |
| 	restore_current();
 | |
| 	spin_unlock_irqrestore(&prom_lock, flags);
 | |
| 
 | |
| 	return handle;
 | |
| }
 | |
| 
 | |
| /* Close the device described by device handle 'dhandle'. */
 | |
| int
 | |
| prom_devclose(int dhandle)
 | |
| {
 | |
| 	unsigned long flags;
 | |
| 	spin_lock_irqsave(&prom_lock, flags);
 | |
| 	switch(prom_vers) {
 | |
| 	case PROM_V0:
 | |
| 		(*(romvec->pv_v0devops.v0_devclose))(dhandle);
 | |
| 		break;
 | |
| 	case PROM_V2:
 | |
| 	case PROM_V3:
 | |
| 		(*(romvec->pv_v2devops.v2_dev_close))(dhandle);
 | |
| 		break;
 | |
| 	default:
 | |
| 		break;
 | |
| 	};
 | |
| 	restore_current();
 | |
| 	spin_unlock_irqrestore(&prom_lock, flags);
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /* Seek to specified location described by 'seekhi' and 'seeklo'
 | |
|  * for device 'dhandle'.
 | |
|  */
 | |
| void
 | |
| prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo)
 | |
| {
 | |
| 	unsigned long flags;
 | |
| 	spin_lock_irqsave(&prom_lock, flags);
 | |
| 	switch(prom_vers) {
 | |
| 	case PROM_V0:
 | |
| 		(*(romvec->pv_v0devops.v0_seekdev))(dhandle, seekhi, seeklo);
 | |
| 		break;
 | |
| 	case PROM_V2:
 | |
| 	case PROM_V3:
 | |
| 		(*(romvec->pv_v2devops.v2_dev_seek))(dhandle, seekhi, seeklo);
 | |
| 		break;
 | |
| 	default:
 | |
| 		break;
 | |
| 	};
 | |
| 	restore_current();
 | |
| 	spin_unlock_irqrestore(&prom_lock, flags);
 | |
| 
 | |
| 	return;
 | |
| }
 |