#include <inttypes.h>
#include <stdint.h>
Go to the source code of this file.
◆ DISK_SECTOR_SIZE
| #define DISK_SECTOR_SIZE 512 |
◆ PRDSNu
◆ disk_sector_t
◆ disk_get()
| struct disk * disk_get |
( |
int |
chan_no, |
|
|
int |
dev_no |
|
) |
| |
186 {
187 ASSERT (dev_no == 0 || dev_no == 1);
188
192 return d;
193 }
195}
#define ASSERT(CONDITION)
Definition: debug.h:30
static struct channel channels[CHANNEL_CNT]
Definition: disk.c:81
#define CHANNEL_CNT
Definition: disk.c:80
#define NULL
Definition: stddef.h:4
struct disk devices[2]
Definition: disk.c:76
int dev_no
Definition: disk.c:55
bool is_ata
Definition: disk.c:57
◆ disk_init()
101 {
102 size_t chan_no;
103
104 for (chan_no = 0; chan_no <
CHANNEL_CNT; chan_no++) {
106 int dev_no;
107
108
110 switch (chan_no) {
111 case 0:
114 break;
115 case 1:
118 break;
119 default:
121 }
125
126
127 for (dev_no = 0; dev_no < 2; dev_no++) {
132
135
137 }
138
139
141
142
144
145
148
149
153 }
154
155
157}
#define NOT_REACHED()
Definition: debug.h:34
static void identify_ata_device(struct disk *)
Definition: disk.c:346
void register_disk_inspect_intr(void)
Definition: disk.c:551
static void reset_channel(struct channel *)
Definition: disk.c:260
static bool check_device_type(struct disk *)
Definition: disk.c:320
static void interrupt_handler(struct intr_frame *)
Definition: disk.c:516
void intr_register_ext(uint8_t vec, intr_handler_func *, const char *name)
Definition: interrupt.c:228
int int snprintf(char *, size_t, const char *,...) PRINTF_FORMAT(3
bool expecting_interrupt
Definition: disk.c:72
struct semaphore completion_wait
Definition: disk.c:74
char name[8]
Definition: disk.c:67
uint16_t reg_base
Definition: disk.c:68
uint8_t irq
Definition: disk.c:69
struct lock lock
Definition: disk.c:71
disk_sector_t capacity
Definition: disk.c:58
struct channel * channel
Definition: disk.c:54
long long write_cnt
Definition: disk.c:61
long long read_cnt
Definition: disk.c:60
char name[8]
Definition: disk.c:53
void sema_init(struct semaphore *, unsigned value)
Definition: synch.c:52
void lock_init(struct lock *)
Definition: synch.c:186
◆ disk_print_stats()
| void disk_print_stats |
( |
void |
| ) |
|
161 {
162 int chan_no;
163
164 for (chan_no = 0; chan_no <
CHANNEL_CNT; chan_no++) {
165 int dev_no;
166
167 for (dev_no = 0; dev_no < 2; dev_no++) {
170 printf (
"%s: %lld reads, %lld writes\n",
172 }
173 }
174}
struct disk * disk_get(int chan_no, int dev_no)
Definition: disk.c:186
int printf(const char *,...) PRINTF_FORMAT(1
◆ disk_read()
211 {
213
216
227}
#define PANIC(...)
Definition: debug.h:14
static bool wait_while_busy(const struct disk *)
Definition: disk.c:474
static void issue_pio_command(struct channel *, uint8_t command)
Definition: disk.c:426
static void input_sector(struct channel *, void *)
Definition: disk.c:438
static void select_sector(struct disk *, disk_sector_t)
Definition: disk.c:408
#define CMD_READ_SECTOR_RETRY
Definition: disk.c:48
#define PRDSNu
Definition: disk.h:16
void lock_release(struct lock *)
Definition: synch.c:243
void sema_down(struct semaphore *)
Definition: synch.c:68
void lock_acquire(struct lock *)
Definition: synch.c:202
◆ disk_size()
◆ disk_write()
235 {
237
240
251}
#define CMD_WRITE_SECTOR_RETRY
Definition: disk.c:49
static void output_sector(struct channel *, const void *)
Definition: disk.c:445
◆ register_disk_inspect_intr()
| void register_disk_inspect_intr |
( |
| ) |
|
551 {
554}
static void inspect_write_cnt(struct intr_frame *f)
Definition: disk.c:539
static void inspect_read_cnt(struct intr_frame *f)
Definition: disk.c:533
@ INTR_OFF
Definition: interrupt.h:9
void intr_register_int(uint8_t vec, int dpl, enum intr_level, intr_handler_func *, const char *name)
Definition: interrupt.c:248