1/* $Id: devops.c,v 1.1.1.1 2007/08/03 18:52:18 Exp $ 2 * devops.c: Device operations using the PROM. 3 * 4 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) 5 */ 6#include <linux/types.h> 7#include <linux/kernel.h> 8#include <linux/sched.h> 9 10#include <asm/openprom.h> 11#include <asm/oplib.h> 12 13extern void restore_current(void); 14 15/* Open the device described by the string 'dstr'. Returns the handle 16 * to that device used for subsequent operations on that device. 17 * Returns -1 on failure. 18 */ 19int 20prom_devopen(char *dstr) 21{ 22 int handle; 23 unsigned long flags; 24 spin_lock_irqsave(&prom_lock, flags); 25 switch(prom_vers) { 26 case PROM_V0: 27 handle = (*(romvec->pv_v0devops.v0_devopen))(dstr); 28 if(handle == 0) handle = -1; 29 break; 30 case PROM_V2: 31 case PROM_V3: 32 handle = (*(romvec->pv_v2devops.v2_dev_open))(dstr); 33 break; 34 default: 35 handle = -1; 36 break; 37 }; 38 restore_current(); 39 spin_unlock_irqrestore(&prom_lock, flags); 40 41 return handle; 42} 43 44/* Close the device described by device handle 'dhandle'. */ 45int 46prom_devclose(int dhandle) 47{ 48 unsigned long flags; 49 spin_lock_irqsave(&prom_lock, flags); 50 switch(prom_vers) { 51 case PROM_V0: 52 (*(romvec->pv_v0devops.v0_devclose))(dhandle); 53 break; 54 case PROM_V2: 55 case PROM_V3: 56 (*(romvec->pv_v2devops.v2_dev_close))(dhandle); 57 break; 58 default: 59 break; 60 }; 61 restore_current(); 62 spin_unlock_irqrestore(&prom_lock, flags); 63 return 0; 64} 65 66/* Seek to specified location described by 'seekhi' and 'seeklo' 67 * for device 'dhandle'. 68 */ 69void 70prom_seek(int dhandle, unsigned int seekhi, unsigned int seeklo) 71{ 72 unsigned long flags; 73 spin_lock_irqsave(&prom_lock, flags); 74 switch(prom_vers) { 75 case PROM_V0: 76 (*(romvec->pv_v0devops.v0_seekdev))(dhandle, seekhi, seeklo); 77 break; 78 case PROM_V2: 79 case PROM_V3: 80 (*(romvec->pv_v2devops.v2_dev_seek))(dhandle, seekhi, seeklo); 81 break; 82 default: 83 break; 84 }; 85 restore_current(); 86 spin_unlock_irqrestore(&prom_lock, flags); 87 88 return; 89} 90