WIP
This commit is contained in:
79
tests/big-blkdev.c
Normal file
79
tests/big-blkdev.c
Normal file
@@ -0,0 +1,79 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "mmio.h"
|
||||
#include "blkdev.h"
|
||||
|
||||
#define SECTOR_WORDS (BLKDEV_SECTOR_SIZE / sizeof(uint64_t))
|
||||
#define TEST_SECTORS 128
|
||||
|
||||
unsigned long sector_buf[SECTOR_WORDS];
|
||||
|
||||
void write_sector(unsigned int secnum)
|
||||
{
|
||||
int req_tag, resp_tag;
|
||||
|
||||
for (int i = 0; i < SECTOR_WORDS; i++)
|
||||
sector_buf[i] = (secnum << 6) | i;
|
||||
|
||||
while (reg_read8(BLKDEV_NREQUEST) == 0);
|
||||
req_tag = blkdev_send_request((unsigned long) sector_buf, secnum, 1, 1);
|
||||
while (reg_read8(BLKDEV_NCOMPLETE) == 0);
|
||||
resp_tag = reg_read8(BLKDEV_COMPLETE);
|
||||
|
||||
if (req_tag != resp_tag) {
|
||||
printf("Response tag %d does not match request tag %d\n",
|
||||
req_tag, resp_tag);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
|
||||
void check_sector(unsigned int secnum)
|
||||
{
|
||||
int req_tag, resp_tag;
|
||||
|
||||
while (reg_read8(BLKDEV_NREQUEST) == 0);
|
||||
req_tag = blkdev_send_request((unsigned long) sector_buf, secnum, 1, 0);
|
||||
while (reg_read8(BLKDEV_NCOMPLETE) == 0);
|
||||
resp_tag = reg_read8(BLKDEV_COMPLETE);
|
||||
|
||||
if (req_tag != resp_tag) {
|
||||
printf("Response tag %d does not match request tag %d\n",
|
||||
req_tag, resp_tag);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
for (int i = 0; i < SECTOR_WORDS; i++) {
|
||||
unsigned long expected = (secnum << 6) | i;
|
||||
unsigned long actual = sector_buf[i];
|
||||
if (actual != expected) {
|
||||
printf("Word %d in sector %x does not match expected\n",
|
||||
i, secnum);
|
||||
printf("Expected %lx, got %lx\n",
|
||||
expected, actual);
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
unsigned int nsectors = blkdev_nsectors();
|
||||
unsigned int stride = nsectors / TEST_SECTORS;
|
||||
|
||||
printf("Writing %u of %u sectors\n", TEST_SECTORS, nsectors);
|
||||
|
||||
for (int i = 0; i < TEST_SECTORS; i++) {
|
||||
int sector = i * stride;
|
||||
write_sector(sector);
|
||||
}
|
||||
|
||||
printf("Checking sectors\n", nsectors);
|
||||
|
||||
for (int i = 0; i < TEST_SECTORS; i++) {
|
||||
int sector = i * stride;
|
||||
check_sector(sector);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user