80 lines
2.0 KiB
C
80 lines
2.0 KiB
C
/*
|
|
* Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
|
|
* Copyright (C) 2001 RidgeRun, Inc (glonnon@ridgerun.com)
|
|
* Licensed under the GPL
|
|
*/
|
|
|
|
#ifndef __UM_UBD_USER_H
|
|
#define __UM_UBD_USER_H
|
|
|
|
#include "os.h"
|
|
|
|
enum ubd_req { UBD_READ, UBD_WRITE, UBD_MMAP };
|
|
|
|
struct io_thread_req {
|
|
enum ubd_req op;
|
|
int fds[2];
|
|
unsigned long offsets[2];
|
|
unsigned long long offset;
|
|
unsigned long length;
|
|
char *buffer;
|
|
int sectorsize;
|
|
unsigned long sector_mask;
|
|
unsigned long long cow_offset;
|
|
unsigned long bitmap_words[2];
|
|
int map_fd;
|
|
unsigned long long map_offset;
|
|
int error;
|
|
};
|
|
|
|
extern int open_ubd_file(char *file, struct openflags *openflags,
|
|
char **backing_file_out, int *bitmap_offset_out,
|
|
unsigned long *bitmap_len_out, int *data_offset_out,
|
|
int *create_cow_out);
|
|
extern int create_cow_file(char *cow_file, char *backing_file,
|
|
struct openflags flags, int sectorsize,
|
|
int alignment, int *bitmap_offset_out,
|
|
unsigned long *bitmap_len_out,
|
|
int *data_offset_out);
|
|
extern int read_cow_bitmap(int fd, void *buf, int offset, int len);
|
|
extern int read_ubd_fs(int fd, void *buffer, int len);
|
|
extern int write_ubd_fs(int fd, char *buffer, int len);
|
|
extern int start_io_thread(unsigned long sp, int *fds_out);
|
|
extern void do_io(struct io_thread_req *req);
|
|
|
|
static inline int ubd_test_bit(__u64 bit, unsigned char *data)
|
|
{
|
|
__u64 n;
|
|
int bits, off;
|
|
|
|
bits = sizeof(data[0]) * 8;
|
|
n = bit / bits;
|
|
off = bit % bits;
|
|
return((data[n] & (1 << off)) != 0);
|
|
}
|
|
|
|
static inline void ubd_set_bit(__u64 bit, unsigned char *data)
|
|
{
|
|
__u64 n;
|
|
int bits, off;
|
|
|
|
bits = sizeof(data[0]) * 8;
|
|
n = bit / bits;
|
|
off = bit % bits;
|
|
data[n] |= (1 << off);
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
/*
|
|
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
* Emacs will notice this stuff at the end of the file and automatically
|
|
* adjust the settings for this buffer only. This must remain at the end
|
|
* of the file.
|
|
* ---------------------------------------------------------------------------
|
|
* Local variables:
|
|
* c-file-style: "linux"
|
|
* End:
|
|
*/
|