コード例 #1
0
ファイル: core_mmu.c プロジェクト: lackan/optee_os
/*
 * core_init_mmu_map - init tee core default memory mapping
 *
 * this routine sets the static default tee core mapping.
 *
 * If an error happend: core_init_mmu_map is expected to reset.
 */
void core_init_mmu_map(void)
{
	struct tee_mmap_region *map;
	size_t n;

	for (n = 0; n < ARRAY_SIZE(secure_only); n++) {
		if (pbuf_intersects(nsec_shared, secure_only[n].paddr,
				    secure_only[n].size))
			panic("Invalid memory access config: sec/nsec");
	}

	if (!mem_map_inited)
		init_mem_map(static_memory_map, ARRAY_SIZE(static_memory_map));

	map = static_memory_map;
	while (map->type != MEM_AREA_NOTYPE) {
		switch (map->type) {
		case MEM_AREA_TEE_RAM:
			if (!pbuf_is_inside(secure_only, map->pa, map->size))
				panic("TEE_RAM can't fit in secure_only");

			map_tee_ram = map;
			break;
		case MEM_AREA_TA_RAM:
			if (!pbuf_is_inside(secure_only, map->pa, map->size))
				panic("TA_RAM can't fit in secure_only");
			map_ta_ram = map;
			break;
		case MEM_AREA_NSEC_SHM:
			if (!pbuf_is_inside(nsec_shared, map->pa, map->size))
				panic("NS_SHM can't fit in nsec_shared");
			map_nsec_shm = map;
			break;
		case MEM_AREA_IO_SEC:
		case MEM_AREA_IO_NSEC:
		case MEM_AREA_RAM_SEC:
		case MEM_AREA_RAM_NSEC:
		case MEM_AREA_RES_VASPACE:
			break;
		default:
			EMSG("Uhandled memtype %d", map->type);
			panic();
		}
		map++;
	}

	/* Check that we have the mandatory memory areas defined */
	if (!map_tee_ram || !map_ta_ram || !map_nsec_shm)
		panic("mandatory area(s) not found");

	core_init_mmu_tables(static_memory_map);
}
コード例 #2
0
ファイル: trd_rp.c プロジェクト: fbalakirev/red-pitaya-notes
int main(int argc, char *argv[])
{

  int sockServer,sock_client,yes = 1;
  uint64_t command = 600000;
  pthread_t thread;
  uint32_t IDN=0xb00b;
  uint32_t status;
  void *(*handler[3])(void *) =
  {
    ctrl_handler,
	rx_handler,
	tx_handler
  };


  struct sockaddr_in addr;
  if (argc >=2 ) {
	  if (argv[1][0]=='v' ) verbose = 1;
	  if (argv[1][0]=='V' ) verbose = 2;
  }

  if(init_mem_map())
  {
    perror("memory mapping");
    return EXIT_FAILURE;
  }
  //put logic into reset
 *((uint32_t *)(cfg + 0)) &= ~0xf;

  if(init_temperature_scale())
 {
   perror("temperature scale");
   return EXIT_FAILURE;
 }

  if((sockServer = socket(AF_INET, SOCK_STREAM, 0)) < 0)
  {
    perror("socket");
    return EXIT_FAILURE;
  }
  setsockopt(sockServer, SOL_SOCKET, SO_REUSEADDR, (void *)&yes , sizeof(yes));
  /* setup listening address */
  memset(&addr, 0, sizeof(addr));
  addr.sin_family = AF_INET;
  addr.sin_addr.s_addr = htonl(INADDR_ANY);
  addr.sin_port = htons(TCP_PORT);

  if(bind(sockServer, (struct sockaddr *)&addr, sizeof(addr)) < 0)
  {
    perror("bind");
    return EXIT_FAILURE;
  }

  listen(sockServer, 1024);
  signal(SIGINT, signal_handler);

  while(!interrupted) {
	  int result, selector;
	  if(verbose)printf("waiting for client\n");
	  if((sock_client = accept(sockServer, NULL, NULL)) < 0)
      {
          perror("accept");
          return 1;
      }
	  if(verbose)printf("new connection, waiting for command\n");
	  result = recv(sock_client, (char *)&command, sizeof(command), MSG_WAITALL);
	  if(result >= sizeof(command) )
	  {
	     switch(command >> 60)
	     {
	       case CMD_IDN:
	    	   if(verbose)printf("MAIN: IDN query, socket=%d\n",sock_client);
	          	status=*((uint32_t *)(sts + 8));
	          	if(verbose)printf("Status = %u\n", status);
	          	status = ( status & 0xffff0000 ) | (IDN & 0x0000ffff );
	 		   if(send(sock_client, &status, sizeof(status), 0) < 0){   perror("send");break;}
	 		   close(sock_client);
	    	   break;
	       case CMD_CONNECT:
	    	 if((selector = command & 0x3)<3)
	    	 {
	    	   if(sock_thread[selector] > -1)
	    	   {
	    	      	int ret;
	    	       	if(verbose)printf("MAIN: closing thread connection sock=%d\n",sock_thread[selector]);
	    	        ret=shutdown(sock_thread[selector],SHUT_RDWR);
	    	        while(sock_thread[selector] > -1) usleep(1000);
	    	        if(verbose)printf("MAIN: shutdown ret = %d, command = %llx, now sock=%d\n",ret,command,sock_thread[selector]);
	    	   }
	   	       sock_thread[selector] = sock_client;
	    	   if(pthread_create(&thread, NULL, handler[selector], NULL) < 0)
	    	   {
	    		    perror("pthread_create");
	    		    return EXIT_FAILURE;
	    	   }
	    	   pthread_detach(thread);
	    	 }
	    	 break;
	       case CMD_STOP:
	    	   close(sock_client);
	    	   clean_up();
	    	   if(verbose)printf("Exit program\n");
	    	   return 0;
	    	 break;
	       default:
			 if(verbose)printf("Unexpected command, closing connection, socket = %d\n",sock_client);
		     close(sock_client);
             break;
	     }
	  }
	  else
	  {
		 if(verbose)printf("Unexpected communication, closing connection, socket = %d\n",sock_client);
		 close(sock_client);
      }
	}
コード例 #3
0
ファイル: mm.c プロジェクト: guzhoudiaoke/babyos
void init_mm()
{
    check_total_memory();
    init_mem_map();
}