summaryrefslogtreecommitdiffstats
path: root/pintos-progos/devices/block.h
diff options
context:
space:
mode:
Diffstat (limited to 'pintos-progos/devices/block.h')
-rw-r--r--pintos-progos/devices/block.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/pintos-progos/devices/block.h b/pintos-progos/devices/block.h
new file mode 100644
index 0000000..21732d6
--- /dev/null
+++ b/pintos-progos/devices/block.h
@@ -0,0 +1,74 @@
1#ifndef DEVICES_BLOCK_H
2#define DEVICES_BLOCK_H
3
4#include <stddef.h>
5#include <inttypes.h>
6
7/* Size of a block device sector in bytes.
8 All IDE disks use this sector size, as do most USB and SCSI
9 disks. It's not worth it to try to cater to other sector
10 sizes in Pintos (yet). */
11#define BLOCK_SECTOR_SIZE 512
12
13/* Index of a block device sector.
14 Good enough for devices up to 2 TB. */
15typedef uint32_t block_sector_t;
16
17/* Format specifier for printf(), e.g.:
18 printf ("sector=%"PRDSNu"\n", sector); */
19#define PRDSNu PRIu32
20
21/* Higher-level interface for file systems, etc. */
22
23struct block;
24
25/* Type of a block device. */
26enum block_type
27 {
28 /* Block device types that play a role in Pintos. */
29 BLOCK_KERNEL, /* Pintos OS kernel. */
30 BLOCK_FILESYS, /* File system. */
31 BLOCK_SCRATCH, /* Scratch. */
32 BLOCK_SWAP, /* Swap. */
33 BLOCK_ROLE_CNT,
34
35 /* Other kinds of block devices that Pintos may see but does
36 not interact with. */
37 BLOCK_RAW = BLOCK_ROLE_CNT, /* "Raw" device with unidentified contents. */
38 BLOCK_FOREIGN, /* Owned by non-Pintos operating system. */
39 BLOCK_CNT /* Number of Pintos block types. */
40 };
41
42const char *block_type_name (enum block_type);
43
44/* Finding block devices. */
45struct block *block_get_role (enum block_type);
46void block_set_role (enum block_type, struct block *);
47struct block *block_get_by_name (const char *name);
48
49struct block *block_first (void);
50struct block *block_next (struct block *);
51
52/* Block device operations. */
53block_sector_t block_size (struct block *);
54void block_read (struct block *, block_sector_t, void *);
55void block_write (struct block *, block_sector_t, const void *);
56const char *block_name (struct block *);
57enum block_type block_type (struct block *);
58
59/* Statistics. */
60void block_print_stats (void);
61
62/* Lower-level interface to block device drivers. */
63
64struct block_operations
65 {
66 void (*read) (void *aux, block_sector_t, void *buffer);
67 void (*write) (void *aux, block_sector_t, const void *buffer);
68 };
69
70struct block *block_register (const char *name, enum block_type,
71 const char *extra_info, block_sector_t size,
72 const struct block_operations *, void *aux);
73
74#endif /* devices/block.h */