static int es7000_mip_write(struct mip_reg *mip_reg)
{
    int status = 0;
    int spin;

    spin = MIP_SPIN;
    while ((host_reg->off_0x38 & MIP_VALID) != 0) {
        if (--spin <= 0) {
            WARN(1,	"Timeout waiting for Host Valid Flag\n");
            return -1;
        }
        es7000_spin(MIP_SPIN);
    }

    memcpy(host_reg, mip_reg, sizeof(struct mip_reg));
    outb(1, mip_port);

    spin = MIP_SPIN;

    while ((mip_reg->off_0x38 & MIP_VALID) == 0) {
        if (--spin <= 0) {
            WARN(1,	"Timeout waiting for MIP Valid Flag\n");
            return -1;
        }
        es7000_spin(MIP_SPIN);
    }

    status = (mip_reg->off_0x00 & 0xffff0000000000ULL) >> 48;
    mip_reg->off_0x38 &= ~MIP_VALID;

    return status;
}
Пример #2
0
static int __init
es7000_mip_write(struct mip_reg *mip_reg)
{
	int			status = 0;
	int			spin;

	spin = MIP_SPIN;
	while (((unsigned long long)host_reg->off_38 &
		(unsigned long long)MIP_VALID) != 0) {
			if (--spin <= 0) {
				printk("es7000_mip_write: Timeout waiting for Host Valid Flag");
				return -1;
			}
		es7000_spin(MIP_SPIN);
	}

	memcpy(host_reg, mip_reg, sizeof(struct mip_reg));
	outb(1, mip_port);

	spin = MIP_SPIN;

	while (((unsigned long long)mip_reg->off_38 &
		(unsigned long long)MIP_VALID) == 0) {
		if (--spin <= 0) {
			printk("es7000_mip_write: Timeout waiting for MIP Valid Flag");
			return -1;
		}
		es7000_spin(MIP_SPIN);
	}

	status = ((unsigned long long)mip_reg->off_0 &
		(unsigned long long)0xffff0000000000ULL) >> 48;
	mip_reg->off_38 = ((unsigned long long)mip_reg->off_38 &
		(unsigned long long)~MIP_VALID);
	return status;
}