PageRenderTime 13ms CodeModel.GetById 7ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/arch/sparc/prom/devops.c

https://bitbucket.org/evzijst/gittest
C | 89 lines | 69 code | 7 blank | 13 comment | 2 complexity | 289ad0bf43f42d6e0fb54c4734de11c7 MD5 | raw file
 1/* $Id: devops.c,v 1.13 2000/08/26 02:38:03 anton 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}