Changeset View
Changeset View
Standalone View
Standalone View
head/sys/compat/linux/linux.c
Show First 20 Lines • Show All 545 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
void | void | ||||
linux_dev_shm_destroy(void) | linux_dev_shm_destroy(void) | ||||
{ | { | ||||
destroy_dev(dev_shm_cdev); | destroy_dev(dev_shm_cdev); | ||||
} | } | ||||
int | |||||
bsd_to_linux_bits_(int value, struct bsd_to_linux_bitmap *bitmap, | |||||
size_t mapcnt, int no_value) | |||||
{ | |||||
int bsd_mask, bsd_value, linux_mask, linux_value; | |||||
int linux_ret; | |||||
size_t i; | |||||
bool applied; | |||||
applied = false; | |||||
linux_ret = 0; | |||||
for (i = 0; i < mapcnt; ++i) { | |||||
bsd_mask = bitmap[i].bsd_mask; | |||||
bsd_value = bitmap[i].bsd_value; | |||||
if (bsd_mask == 0) | |||||
bsd_mask = bsd_value; | |||||
linux_mask = bitmap[i].linux_mask; | |||||
linux_value = bitmap[i].linux_value; | |||||
if (linux_mask == 0) | |||||
linux_mask = linux_value; | |||||
/* | |||||
* If a mask larger than just the value is set, we explicitly | |||||
* want to make sure that only this bit we mapped within that | |||||
* mask is set. | |||||
*/ | |||||
if ((value & bsd_mask) == bsd_value) { | |||||
linux_ret = (linux_ret & ~linux_mask) | linux_value; | |||||
applied = true; | |||||
} | |||||
} | |||||
if (!applied) | |||||
return (no_value); | |||||
return (linux_ret); | |||||
} | |||||
int | |||||
linux_to_bsd_bits_(int value, struct bsd_to_linux_bitmap *bitmap, | |||||
size_t mapcnt, int no_value) | |||||
{ | |||||
int bsd_mask, bsd_value, linux_mask, linux_value; | |||||
int bsd_ret; | |||||
size_t i; | |||||
bool applied; | |||||
applied = false; | |||||
bsd_ret = 0; | |||||
for (i = 0; i < mapcnt; ++i) { | |||||
bsd_mask = bitmap[i].bsd_mask; | |||||
bsd_value = bitmap[i].bsd_value; | |||||
if (bsd_mask == 0) | |||||
bsd_mask = bsd_value; | |||||
linux_mask = bitmap[i].linux_mask; | |||||
linux_value = bitmap[i].linux_value; | |||||
if (linux_mask == 0) | |||||
linux_mask = linux_value; | |||||
/* | |||||
* If a mask larger than just the value is set, we explicitly | |||||
* want to make sure that only this bit we mapped within that | |||||
* mask is set. | |||||
*/ | |||||
if ((value & linux_mask) == linux_value) { | |||||
bsd_ret = (bsd_ret & ~bsd_mask) | bsd_value; | |||||
applied = true; | |||||
} | |||||
} | |||||
if (!applied) | |||||
return (no_value); | |||||
return (bsd_ret); | |||||
} |