Rev 4921 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4921 | Rev 6536 | ||
---|---|---|---|
1 | #include |
1 | #include |
2 | #include "io.h" |
2 | #include |
- | 3 | #include "io.h" |
|
3 | 4 | ||
4 | extern __io_handle __io_tab[64]; |
5 | extern __io_handle __io_tab[64]; |
5 | 6 | ||
6 | static int fake_io(const char *path, const void *buff, |
7 | static int fake_io(const char *path, const void *buff, |
7 | size_t offset, size_t count, size_t *done) |
8 | size_t offset, size_t count, size_t *done) |
8 | { |
9 | { |
9 | *done = 0; |
10 | *done = 0; |
10 | return 10; |
11 | return 10; |
11 | }; |
12 | }; |
12 | 13 | ||
- | 14 | //static int fake_io_read(const char *path, void *buff, |
|
- | 15 | // size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io"))); |
|
- | 16 | ||
13 | static int fake_io_read(const char *path, void *buff, |
17 | static int fake_io_read(const char *path, void *buff, |
14 | size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io"))); |
18 | size_t offset, size_t count, size_t *done) |
- | 19 | { |
|
- | 20 | printf("%s path:%s buf:%p offset:%d count:%d\n", |
|
- | 21 | __FUNCTION__, path, buff, offset, count); |
|
- | 22 | ||
- | 23 | } |
|
15 | 24 | ||
16 | static int fake_io_write(const char *path, const void *buff, |
25 | static int fake_io_write(const char *path, const void *buff, |
17 | size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io"))); |
26 | size_t offset, size_t count, size_t *done) __attribute__ ((alias("fake_io"))); |
18 | 27 | ||
19 | static inline void debug_out(const char val) |
28 | static inline void debug_out(const char val) |
20 | { |
29 | { |
21 | __asm__ __volatile__( |
30 | __asm__ __volatile__( |
22 | "int $0x40 \n\t" |
31 | "int $0x40 \n\t" |
23 | ::"a"(63), "b"(1),"c"(val)); |
32 | ::"a"(63), "b"(1),"c"(val)); |
24 | } |
33 | } |
25 | 34 | ||
26 | static int debugwrite(const char *path, const void *buff, |
35 | static int debugwrite(const char *path, const void *buff, |
27 | size_t offset, size_t count, size_t *writes) |
36 | size_t offset, size_t count, size_t *writes) |
28 | { |
37 | { |
29 | int ret = count; |
38 | int ret = count; |
30 | const char *p = buff; |
39 | const char *p = buff; |
31 | 40 | ||
32 | while (count--) |
41 | while (count--) |
33 | { |
42 | { |
34 | debug_out(*p++); |
43 | debug_out(*p++); |
35 | }; |
44 | }; |
36 | *writes = ret; |
45 | *writes = ret; |
37 | return ret; |
46 | return ret; |
38 | }; |
47 | }; |
39 | 48 | ||
40 | void init_stdio() |
49 | void init_stdio() |
41 | { |
50 | { |
42 | __io_handle *ioh; |
51 | __io_handle *ioh; |
43 | 52 | ||
44 | ioh = &__io_tab[__io_alloc()]; |
53 | ioh = &__io_tab[__io_alloc()]; |
45 | ioh->mode = _READ|_ISTTY; |
54 | ioh->mode = _READ|_ISTTY; |
46 | ioh->read = &fake_io_read; |
55 | ioh->read = &fake_io_read; |
47 | ioh->write = &fake_io_write; |
56 | ioh->write = &fake_io_write; |
48 | 57 | ||
49 | ioh = &__io_tab[__io_alloc()]; |
58 | ioh = &__io_tab[__io_alloc()]; |
50 | ioh->mode = _WRITE|_ISTTY; |
59 | ioh->mode = _WRITE|_ISTTY; |
51 | ioh->read = &fake_io_read; |
60 | ioh->read = &fake_io_read; |
52 | ioh->write = &debugwrite; |
61 | ioh->write = &debugwrite; |
53 | 62 | ||
54 | ioh = &__io_tab[__io_alloc()]; |
63 | ioh = &__io_tab[__io_alloc()]; |
55 | ioh->mode = _WRITE|_ISTTY; |
64 | ioh->mode = _WRITE|_ISTTY; |
56 | ioh->read = &fake_io_read; |
65 | ioh->read = &fake_io_read; |
57 | ioh->write = &debugwrite; |
66 | ioh->write = &debugwrite; |
58 | 67 | ||
59 | } |
68 | } |