#include <vfs.h>
#include <kfs.h>
#include <slab.h>
#include <kmalloc.h>
#include <kref.h>
#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <error.h>
#include <cpio.h>
#include <pmap.h>
#include <smp.h>

static short endian = 1;
static uint8_t *aendian = (uint8_t *) & endian;
#define	LITTLE	*aendian

uint16_t ptclbsum(uint8_t * addr, int len)
{
	uint32_t losum, hisum, mdsum, x;
	uint32_t t1, t2;

	losum = 0;
	hisum = 0;
	mdsum = 0;

	x = 0;
	if (((uintptr_t) addr) & 1) {
		if (len) {
			hisum += addr[0];
			len--;
			addr++;
		}
		x = 1;
	}
	while (len >= 16) {
		t1 = *(uint16_t *) (addr + 0);
		t2 = *(uint16_t *) (addr + 2);
		mdsum += t1;
		t1 = *(uint16_t *) (addr + 4);
		mdsum += t2;
		t2 = *(uint16_t *) (addr + 6);
		mdsum += t1;
		t1 = *(uint16_t *) (addr + 8);
		mdsum += t2;
		t2 = *(uint16_t *) (addr + 10);
		mdsum += t1;
		t1 = *(uint16_t *) (addr + 12);
		mdsum += t2;
		t2 = *(uint16_t *) (addr + 14);
		mdsum += t1;
		mdsum += t2;
		len -= 16;
		addr += 16;
	}
	while (len >= 2) {
		mdsum += *(uint16_t *) addr;
		len -= 2;
		addr += 2;
	}
	if (x) {
		if (len)
			losum += addr[0];
		if (LITTLE)
			losum += mdsum;
		else
			hisum += mdsum;
	} else {
		if (len)
			hisum += addr[0];
		if (LITTLE)
			hisum += mdsum;
		else
			losum += mdsum;
	}

	losum += hisum >> 8;
	losum += (hisum & 0xff) << 8;
	while ((hisum = (losum >> 16)))
		losum = hisum + (losum & 0xffff);

	return losum & 0xffff;
}
