xref: /openbsd/sys/arch/landisk/stand/boot/devs.c (revision 73471bf0)
1 /*	$OpenBSD: devs.c,v 1.12 2020/12/09 18:10:19 krw Exp $	*/
2 
3 /*
4  * Copyright (c) 2006 Michael Shalayeff
5  * All rights reserved.
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
16  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
17  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #include <sys/param.h>
21 #include <libsa.h>
22 #include <lib/libsa/loadfile.h>
23 
24 int sector;
25 
26 void
27 machdep(void)
28 {
29 	tick_init();
30 	cninit();
31 }
32 
33 int
34 devopen(struct open_file *f, const char *fname, char **file)
35 {
36 	if (fname[0] != 'c' || fname[1] != 'f' || fname[2] != ':')
37 		return EINVAL;
38 
39 	*file = (char *)fname + 3;
40 	f->f_flags |= F_NODEV;
41 	f->f_dev = &devsw[0];
42 	return (0);
43 }
44 
45 void
46 devboot(dev_t bootdev, char *p)
47 {
48 	sector = bootdev;	/* passed from pbr */
49 	p[0] = 'c';
50 	p[1] = 'f';
51 	p[2] = '\0';
52 }
53 
54 char *
55 ttyname(int fd)
56 {
57 	return "scif";
58 }
59 
60 dev_t
61 ttydev(char *name)
62 {
63 	return NODEV;
64 }
65 
66 int
67 cnspeed(dev_t dev, int sp)
68 {
69 	scif_init(sp);
70 	return sp;
71 }
72 
73 void
74 run_loadfile(uint64_t *marks, int howto)
75 {
76 	u_long entry;
77 
78 	entry = marks[MARK_ENTRY];
79 	cache_flush();
80 	cache_disable();
81 
82 	(*(void (*)(int,int,int))entry)(howto, marks[MARK_END], 0);
83 }
84 
85 int
86 blkdevopen(struct open_file *f, ...)
87 {
88 	return 0;
89 }
90 
91 int
92 blkdevstrategy(void *v, int flag, daddr_t dblk, size_t size, void *buf, size_t *rsize)
93 {
94 
95 	if (flag != F_READ)
96 		return EROFS;
97 
98 	if (size & (DEV_BSIZE - 1))
99 		return EINVAL;
100 
101 	if (rsize)
102 		*rsize = size;
103 
104 	if (size != 0 && readsects(0x40, sector + dblk, buf,
105 	    size / DEV_BSIZE) != 0)
106 		return EIO;
107 
108 	return 0;
109 }
110 
111 int
112 blkdevclose(struct open_file *f)
113 {
114 	return 0;
115 }
116