184 lines
5.6 KiB
C
184 lines
5.6 KiB
C
/*
|
|
* Copyright 1996-2003 by Hans Reiser, licensing governed by
|
|
* reiserfsprogs/README
|
|
*/
|
|
|
|
/* nothing abount reiserfs here */
|
|
|
|
#ifndef REISERFS_MISC_H
|
|
#define REISERFS_MISC_H
|
|
|
|
#include <endian.h>
|
|
#include "swab.h"
|
|
#include <linux/major.h>
|
|
#include <signal.h>
|
|
#include <unistd.h>
|
|
|
|
#define POSITION_FOUND 8
|
|
#define POSITION_NOT_FOUND 9
|
|
|
|
void check_memory_msg(void);
|
|
void die (char * fmt, ...) __attribute__ ((format (printf, 1, 2)));
|
|
void * getmem (int size);
|
|
void *mem_alloc(int size);
|
|
void freemem (void * p);
|
|
void checkmem (char * p, int size);
|
|
void * expandmem (void * p, int size, int by);
|
|
unsigned int get_mem_size (char * p);
|
|
int is_mounted (char * device_name);
|
|
int is_mounted_read_only (char * device_name);
|
|
void check_and_free_mem (void);
|
|
char * kdevname (int dev);
|
|
|
|
void misc_print_credit(FILE *out);
|
|
|
|
typedef struct dma_info {
|
|
int fd;
|
|
struct stat64 stat;
|
|
int support_type;
|
|
int dma;
|
|
__u64 speed;
|
|
} dma_info_t;
|
|
|
|
int prepare_dma_check(dma_info_t *dma_info);
|
|
int get_dma_info(dma_info_t *dma_info);
|
|
void clean_after_dma_check(int fd, dma_info_t *dma_info);
|
|
|
|
void print_how_far (FILE * fp, unsigned long *passed, unsigned long total, unsigned int inc, int quiet);
|
|
void print_how_fast (unsigned long total,
|
|
unsigned long passed, int cursor_pos, int reset_time);
|
|
__u32 get_random (void);
|
|
int uuid_is_null(unsigned char * uuid);
|
|
int generate_random_uuid (unsigned char * uuid);
|
|
int uuid_is_correct (unsigned char * uuid);
|
|
int set_uuid (const unsigned char * text, unsigned char * UUID);
|
|
|
|
//#include <asm/bitops.h>
|
|
|
|
extern inline int misc_set_bit (unsigned long long nr, void * addr);
|
|
extern inline int misc_clear_bit (unsigned long long nr, void * addr);
|
|
extern inline int misc_test_bit(unsigned long long nr, const void * addr);
|
|
extern inline unsigned long long misc_find_first_zero_bit (const void *vaddr, unsigned long long size);
|
|
extern inline unsigned long long misc_find_next_zero_bit (const void *vaddr, unsigned long long size, unsigned long long offset);
|
|
extern inline unsigned long long misc_find_next_set_bit(const void *vaddr, unsigned long long size, unsigned long long offset);
|
|
extern inline unsigned long long misc_find_first_set_bit (const void *vaddr, unsigned long long size);
|
|
|
|
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
|
|
|
# define cpu_to_le16(val) (val)
|
|
# define le16_to_cpu(val) (val)
|
|
# define cpu_to_le32(val) (val)
|
|
# define le32_to_cpu(val) (val)
|
|
# define cpu_to_le64(val) (val)
|
|
# define le64_to_cpu(val) (val)
|
|
|
|
#elif __BYTE_ORDER == __BIG_ENDIAN
|
|
|
|
# define cpu_to_le16(val) __swab16(val)
|
|
# define le16_to_cpu(val) __swab16(val)
|
|
# define cpu_to_le32(val) __swab32(val)
|
|
# define le32_to_cpu(val) __swab32(val)
|
|
# define cpu_to_le64(val) __swab64(val)
|
|
# define le64_to_cpu(val) __swab64(val)
|
|
|
|
#else
|
|
# error "nuxi/pdp-endian archs are not supported"
|
|
#endif
|
|
|
|
|
|
|
|
unsigned long count_blocks (char * filename, int blocksize);
|
|
|
|
mode_t get_st_mode (char * file_name);
|
|
dev_t get_st_rdev (char * file_name);
|
|
off64_t get_st_size (char * file_name);
|
|
blkcnt64_t get_st_blocks (char * file_name);
|
|
|
|
|
|
/* these are to access bitfield in endian safe manner */
|
|
__u16 mask16 (int from, int count);
|
|
__u32 mask32 (int from, int count);
|
|
__u64 mask64 (int from, int count);
|
|
|
|
|
|
int reiserfs_bin_search (void * key, void * base, __u32 num, int width,
|
|
__u32 *ppos, comparison_fn_t comp_func);
|
|
|
|
struct block_handler {
|
|
__u32 blocknr;
|
|
dev_t device;
|
|
};
|
|
|
|
int blocklist__is_block_saved (struct block_handler ** base, __u32 * count, __u32 blocknr,
|
|
dev_t device, __u32 * position);
|
|
void blocklist__insert_in_position (void * block_h, void ** base, __u32 * count,
|
|
int elem_size, __u32 * position);
|
|
int blockdev_list_compare (const void * block1, const void * block2);
|
|
|
|
|
|
#define set_bit_field_XX(XX,vp,val,from,count) \
|
|
{\
|
|
__u##XX * p, tmp;\
|
|
\
|
|
/* make sure that given value can be put in 'count' bits */\
|
|
if (val > (1 << count))\
|
|
die ("set_bit_field: val %d is too big for %d bits", val, count);\
|
|
\
|
|
p = (__u##XX *)vp;\
|
|
tmp = le##XX##_to_cpu (*p);\
|
|
\
|
|
/* clear 'count' bits starting from 'from'-th one */\
|
|
tmp &= ~mask##XX (from, count);\
|
|
\
|
|
/* put given value in proper bits */\
|
|
tmp |= (val << from);\
|
|
\
|
|
*p = cpu_to_le##XX (tmp);\
|
|
}
|
|
|
|
|
|
#define get_bit_field_XX(XX,vp,from,count) \
|
|
\
|
|
__u##XX * p, tmp;\
|
|
\
|
|
p = (__u##XX *)vp;\
|
|
tmp = le##XX##_to_cpu (*p);\
|
|
\
|
|
/* clear all bits but 'count' bits starting from 'from'-th one */\
|
|
tmp &= mask##XX (from, count);\
|
|
\
|
|
/* get value written in specified bits */\
|
|
tmp >>= from;\
|
|
return tmp;
|
|
|
|
|
|
#ifndef MAJOR
|
|
#define MAJOR(rdev) ((rdev)>>8)
|
|
#define MINOR(rdev) ((rdev) & 0xff)
|
|
#endif /* MAJOR */
|
|
|
|
#ifndef SCSI_DISK_MAJOR
|
|
#define SCSI_DISK_MAJOR(maj) ((maj) == SCSI_DISK0_MAJOR || \
|
|
((maj) >= SCSI_DISK1_MAJOR && (maj) <= SCSI_DISK7_MAJOR))
|
|
#endif /* SCSI_DISK_MAJOR */
|
|
|
|
#ifndef SCSI_BLK_MAJOR
|
|
#define SCSI_BLK_MAJOR(maj) (SCSI_DISK_MAJOR(maj) || (maj) == SCSI_CDROM_MAJOR)
|
|
#endif /* SCSI_BLK_MAJOR */
|
|
|
|
#ifndef IDE_DISK_MAJOR
|
|
#ifdef IDE9_MAJOR
|
|
#define IDE_DISK_MAJOR(maj) ((maj) == IDE0_MAJOR || (maj) == IDE1_MAJOR || \
|
|
(maj) == IDE2_MAJOR || (maj) == IDE3_MAJOR || \
|
|
(maj) == IDE4_MAJOR || (maj) == IDE5_MAJOR || \
|
|
(maj) == IDE6_MAJOR || (maj) == IDE7_MAJOR || \
|
|
(maj) == IDE8_MAJOR || (maj) == IDE9_MAJOR)
|
|
#else
|
|
#define IDE_DISK_MAJOR(maj) ((maj) == IDE0_MAJOR || (maj) == IDE1_MAJOR || \
|
|
(maj) == IDE2_MAJOR || (maj) == IDE3_MAJOR || \
|
|
(maj) == IDE4_MAJOR || (maj) == IDE5_MAJOR)
|
|
#endif /* IDE9_MAJOR */
|
|
#endif /* IDE_DISK_MAJOR */
|
|
|
|
#endif /* REISERFS_MISC_H */
|