Beispiel #1
0
/* Find a free entity in the bitmap starting at block BMAP-START on device
   DEV which contains BMAP-LEN bits. Sets the free bit it finds then returns
   the bit number, or NO_FREE_BLOCK if an error or all bits are set. */
blkno
bmap_alloc(struct fs_device *dev, blkno bmap_start, u_long bmap_len)
{
    blkno bmap_blk = bmap_start;
    while(bmap_len > 0)
    {
	int len, bit;
	struct buf_head *buf = bread(dev, bmap_blk);
	if(buf == NULL)
	    return -1;
	len = min(bmap_len, FS_BLKSIZ * 8);
	FORBID();
	bit = find_zero_bit(buf->buf.bmap, len);
	if(bit != -1)
	{
	    set_bit(buf->buf.bmap, bit);
	    PERMIT();
	    bdirty(buf, TRUE);
	    brelse(buf);
	    return ((bmap_blk - bmap_start) * FS_BLKSIZ * 8) + bit;
	}
	PERMIT();
	brelse(buf);
	bmap_len -= len;
	bmap_blk++;
    }
    ERRNO = E_NOSPC;
    return NO_FREE_BLOCK;
}
Beispiel #2
0
static void
get_sfp_transceiver_class(struct i2c_info *ii, char *buf, size_t size)
{
	const char *tech_class;
	uint8_t code;

	/* Check 10G Ethernet/IB first */
	ii->f(ii, SFF_8472_BASE, SFF_8472_TRANS_START, 1, (caddr_t)&code);
	tech_class = find_zero_bit(eth_10g, code, 1);
	if (tech_class == NULL) {
		/* No match. Try Ethernet 1G */
		ii->f(ii, SFF_8472_BASE, SFF_8472_TRANS_START + 3,
		    1, (caddr_t)&code);
		tech_class = find_zero_bit(eth_compat, code, 1);
	}

	if (tech_class == NULL)
		tech_class = "Unknown";

	snprintf(buf, size, "%s", tech_class);
}
Beispiel #3
0
static void
printf_sfp_transceiver_descr(struct i2c_info *ii, char *buf, size_t size)
{
	char xbuf[12];
	const char *tech_class, *tech_len, *tech_tech, *tech_media, *tech_speed;

	tech_class = NULL;
	tech_len = NULL;
	tech_tech = NULL;
	tech_media = NULL;
	tech_speed = NULL;

	/* Read bytes 3-10 at once */
	ii->f(ii, SFF_8472_BASE, SFF_8472_TRANS_START, 8, &xbuf[3]);

	/* Check 10G ethernet first */
	tech_class = find_zero_bit(eth_10g, xbuf[3], 1);
	if (tech_class == NULL) {
		/* No match. Try 1G */
		tech_class = find_zero_bit(eth_compat, xbuf[6], 1);
	}

	tech_len = find_zero_bit(fc_len, xbuf[7], 1);
	tech_tech = find_zero_bit(cab_tech, xbuf[7] << 8 | xbuf[8], 2);
	tech_media = find_zero_bit(fc_media, xbuf[9], 1);
	tech_speed = find_zero_bit(fc_speed, xbuf[10], 1);

	printf("Class: %s\n", tech_class);
	printf("Length: %s\n", tech_len);
	printf("Tech: %s\n", tech_tech);
	printf("Media: %s\n", tech_media);
	printf("Speed: %s\n", tech_speed);
}
Beispiel #4
0
static void
get_qsfp_transceiver_class(struct i2c_info *ii, char *buf, size_t size)
{
	const char *tech_class;
	uint8_t code;

	/* Check 10/40G Ethernet class only */
	ii->f(ii, SFF_8436_BASE, SFF_8436_CODE_E1040G, 1, (caddr_t)&code);
	tech_class = find_zero_bit(eth_1040g, code, 1);
	if (tech_class == NULL)
		tech_class = "Unknown";

	snprintf(buf, size, "%s", tech_class);
}