1 #ifndef DEVICES_BLOCK_H
2 #define DEVICES_BLOCK_H
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
13 /* Index of a block device sector.
14 Good enough for devices up to 2 TB. */
15 typedef uint32_t block_sector_t;
17 /* Format specifier for printf(), e.g.:
18 printf ("sector=%"PRDSNu"\n", sector); */
21 /* Higher-level interface for file systems, etc. */
25 /* Type of a block device. */
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. */
35 /* Other kinds of block devices that Pintos may see but does
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. */
42 const char *block_type_name (enum block_type);
44 /* Finding block devices. */
45 struct block *block_get_role (enum block_type);
46 void block_set_role (enum block_type, struct block *);
47 struct block *block_get_by_name (const char *name);
49 struct block *block_first (void);
50 struct block *block_next (struct block *);
52 /* Block device operations. */
53 block_sector_t block_size (struct block *);
54 void block_read (struct block *, block_sector_t, void *);
55 void block_write (struct block *, block_sector_t, const void *);
56 const char *block_name (struct block *);
57 enum block_type block_type (struct block *);
60 void block_print_stats (void);
62 /* Lower-level interface to block device drivers. */
64 struct block_operations
66 void (*read) (void *aux, block_sector_t, void *buffer);
67 void (*write) (void *aux, block_sector_t, const void *buffer);
70 struct 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);
74 #endif /* devices/block.h */