prom_phys_total[0].theres_more = 0x0; prom_prom_taken[0].start_adr = 0x0; 
prom_phys_total[0].theres_more = NULL; prom_prom_taken[0].start_adr = NULL; 
void __init prom_meminit(void){	int node = 0;	unsigned int iter, num_regs;	struct linux_mlist_v0 *mptr;  /* ptr for traversal */	switch(prom_vers) {	case PROM_V0:		/* Nice, kind of easier to do in this case. */		/* First, the total physical descriptors. */		for(mptr = (*(romvec->pv_v0mem.v0_totphys)), iter=0;		    mptr; mptr=mptr->theres_more, iter++) {			prom_phys_total[iter].start_adr = mptr->start_adr;			prom_phys_total[iter].num_bytes = mptr->num_bytes;			prom_phys_total[iter].theres_more = &prom_phys_total[iter+1];		}		prom_phys_total[iter-1].theres_more = 0x0;		/* Second, the total prom taken descriptors. */		for(mptr = (*(romvec->pv_v0mem.v0_prommap)), iter=0;		    mptr; mptr=mptr->theres_more, iter++) {			prom_prom_taken[iter].start_adr = mptr->start_adr;			prom_prom_taken[iter].num_bytes = mptr->num_bytes;			prom_prom_taken[iter].theres_more = &prom_prom_taken[iter+1];		}		prom_prom_taken[iter-1].theres_more = 0x0;		/* Last, the available physical descriptors. */		for(mptr = (*(romvec->pv_v0mem.v0_available)), iter=0;		    mptr; mptr=mptr->theres_more, iter++) {			prom_phys_avail[iter].start_adr = mptr->start_adr;			prom_phys_avail[iter].num_bytes = mptr->num_bytes;			prom_phys_avail[iter].theres_more = &prom_phys_avail[iter+1];		}		prom_phys_avail[iter-1].theres_more = 0x0;		/* Sort all the lists. */		prom_sortmemlist(prom_phys_total);		prom_sortmemlist(prom_prom_taken);		prom_sortmemlist(prom_phys_avail);		break;	case PROM_V2:	case PROM_V3:		/* Grrr, have to traverse the prom device tree ;( */		node = prom_getchild(prom_root_node);		node = prom_searchsiblings(node, "memory");		num_regs = prom_getproperty(node, "available",					    (char *) prom_reg_memlist,					    sizeof(prom_reg_memlist));		num_regs = (num_regs/sizeof(struct linux_prom_registers));		for(iter=0; iter<num_regs; iter++) {			prom_phys_avail[iter].start_adr =				(char *) prom_reg_memlist[iter].phys_addr;			prom_phys_avail[iter].num_bytes =				(unsigned long) prom_reg_memlist[iter].reg_size;			prom_phys_avail[iter].theres_more =				&prom_phys_avail[iter+1];		}		prom_phys_avail[iter-1].theres_more = 0x0;		num_regs = prom_getproperty(node, "reg",					    (char *) prom_reg_memlist,					    sizeof(prom_reg_memlist));		num_regs = (num_regs/sizeof(struct linux_prom_registers));		for(iter=0; iter<num_regs; iter++) {			prom_phys_total[iter].start_adr =				(char *) prom_reg_memlist[iter].phys_addr;			prom_phys_total[iter].num_bytes =				(unsigned long) prom_reg_memlist[iter].reg_size;			prom_phys_total[iter].theres_more =				&prom_phys_total[iter+1];		}		prom_phys_total[iter-1].theres_more = 0x0;		node = prom_getchild(prom_root_node);		node = prom_searchsiblings(node, "virtual-memory");		num_regs = prom_getproperty(node, "available",					    (char *) prom_reg_memlist,					    sizeof(prom_reg_memlist));		num_regs = (num_regs/sizeof(struct linux_prom_registers));		/* Convert available virtual areas to taken virtual		 * areas.  First sort, then convert.		 */		for(iter=0; iter<num_regs; iter++) {			prom_prom_taken[iter].start_adr =				(char *) prom_reg_memlist[iter].phys_addr;			prom_prom_taken[iter].num_bytes =				(unsigned long) prom_reg_memlist[iter].reg_size;			prom_prom_taken[iter].theres_more =				&prom_prom_taken[iter+1];		}		prom_prom_taken[iter-1].theres_more = 0x0;		prom_sortmemlist(prom_prom_taken);		/* Finally, convert. */		for(iter=0; iter<num_regs; iter++) {			prom_prom_taken[iter].start_adr =				prom_prom_taken[iter].start_adr +					prom_prom_taken[iter].num_bytes;			prom_prom_taken[iter].num_bytes =				prom_prom_taken[iter+1].start_adr -					prom_prom_taken[iter].start_adr;		}		prom_prom_taken[iter-1].num_bytes =			0xffffffff - (unsigned long) prom_prom_taken[iter-1].start_adr;		/* Sort the other two lists. */		prom_sortmemlist(prom_phys_total);		prom_sortmemlist(prom_phys_avail);		break;	case PROM_SUN4:#ifdef CONFIG_SUN4			/* how simple :) */		prom_phys_total[0].start_adr = 0x0;		prom_phys_total[0].num_bytes = *(sun4_romvec->memorysize);		prom_phys_total[0].theres_more = 0x0;		prom_prom_taken[0].start_adr = 0x0; 		prom_prom_taken[0].num_bytes = 0x0;		prom_prom_taken[0].theres_more = 0x0;		prom_phys_avail[0].start_adr = 0x0;		prom_phys_avail[0].num_bytes = *(sun4_romvec->memoryavail);		prom_phys_avail[0].theres_more = 0x0;#endif		break;	default:		break;	};	/* Link all the lists into the top-level descriptor. */	prom_memlist.v0_totphys=&prom_ptot_ptr;	prom_memlist.v0_prommap=&prom_ptak_ptr;	prom_memlist.v0_available=&prom_pavl_ptr;	return;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3c51f196b658fa1920c84b0752a55ed251d22d52/memory.c/buggy/arch/sparc/prom/memory.c