Changeset View
Changeset View
Standalone View
Standalone View
head/sys/geom/geom_redboot.c
Show First 20 Lines • Show All 240 Lines • ▼ Show 20 Lines | |||||
g_redboot_taste(struct g_class *mp, struct g_provider *pp, int insist) | g_redboot_taste(struct g_class *mp, struct g_provider *pp, int insist) | ||||
{ | { | ||||
struct g_geom *gp; | struct g_geom *gp; | ||||
struct g_consumer *cp; | struct g_consumer *cp; | ||||
struct g_redboot_softc *sc; | struct g_redboot_softc *sc; | ||||
int error, sectorsize, i; | int error, sectorsize, i; | ||||
struct fis_image_desc *fd, *head; | struct fis_image_desc *fd, *head; | ||||
uint32_t offmask; | uint32_t offmask; | ||||
u_int blksize; /* NB: flash block size stored as stripesize */ | off_t blksize; /* NB: flash block size stored as stripesize */ | ||||
u_char *buf; | u_char *buf; | ||||
off_t offset; | off_t offset; | ||||
const char *value; | const char *value; | ||||
char *op; | char *op; | ||||
offset = 0; | offset = 0; | ||||
if (resource_string_value("redboot", 0, "fisoffset", &value) == 0) { | if (resource_string_value("redboot", 0, "fisoffset", &value) == 0) { | ||||
offset = strtouq(value, &op, 0); | offset = strtouq(value, &op, 0); | ||||
Show All 20 Lines | g_redboot_taste(struct g_class *mp, struct g_provider *pp, int insist) | ||||
sectorsize = cp->provider->sectorsize; | sectorsize = cp->provider->sectorsize; | ||||
blksize = cp->provider->stripesize; | blksize = cp->provider->stripesize; | ||||
if (powerof2(cp->provider->mediasize)) | if (powerof2(cp->provider->mediasize)) | ||||
offmask = cp->provider->mediasize-1; | offmask = cp->provider->mediasize-1; | ||||
else | else | ||||
offmask = 0xffffffff; /* XXX */ | offmask = 0xffffffff; /* XXX */ | ||||
if (bootverbose) | if (bootverbose) | ||||
printf("%s: mediasize %ld secsize %d blksize %d offmask 0x%x\n", | printf("%s: mediasize %ld secsize %d blksize %ju offmask 0x%x\n", | ||||
__func__, (long) cp->provider->mediasize, sectorsize, | __func__, (long) cp->provider->mediasize, sectorsize, | ||||
blksize, offmask); | (uintmax_t)blksize, offmask); | ||||
if (sectorsize < sizeof(struct fis_image_desc) || | if (sectorsize < sizeof(struct fis_image_desc) || | ||||
(sectorsize % sizeof(struct fis_image_desc))) | (sectorsize % sizeof(struct fis_image_desc))) | ||||
return (NULL); | return (NULL); | ||||
g_topology_unlock(); | g_topology_unlock(); | ||||
head = NULL; | head = NULL; | ||||
if(offset == 0) | if(offset == 0) | ||||
offset = cp->provider->mediasize - blksize; | offset = cp->provider->mediasize - blksize; | ||||
again: | again: | ||||
▲ Show 20 Lines • Show All 64 Lines • Show Last 20 Lines |