/* Returns pointer to the head of the SMBIOS tables (or NULL).  */
static void __iomem* detect_SMBIOS_pointer(void __iomem *begin, void __iomem *end)
/* Returns pointer to the head of the SMBIOS tables (or NULL).  */
static void __iomem* detect_SMBIOS_pointer(void __iomem *begin, void __iomem *end)
{
	void __iomem *fp;
	void __iomem *endp;
	u8 temp1, temp2, temp3, temp4;
	int status = 0;
	endp = (end - sizeof(u32) + 1);
	for (fp = begin; fp <= endp; fp += 16) {
		temp1 = readb(fp);
		temp2 = readb(fp+1);
		temp3 = readb(fp+2);
		temp4 = readb(fp+3);
		if (temp1 == '_' &&
		    temp2 == 'S' &&
		    temp3 == 'M' &&
		    temp4 == '_') {
			status = 1;
			break;
		}
	}
	if (!status)
		fp = NULL;
	dbg("Discovered SMBIOS Entry point at %p\n", fp);
	return fp;
}