void api_init(void) { struct api_signature *sig = NULL; /* TODO put this into linker set one day... */ calls_table[API_RSVD] = NULL; calls_table[API_GETC] = &API_getc; calls_table[API_PUTC] = &API_putc; calls_table[API_TSTC] = &API_tstc; calls_table[API_PUTS] = &API_puts; calls_table[API_RESET] = &API_reset; calls_table[API_GET_SYS_INFO] = &API_get_sys_info; calls_table[API_UDELAY] = &API_udelay; calls_table[API_GET_TIMER] = &API_get_timer; calls_table[API_DEV_ENUM] = &API_dev_enum; calls_table[API_DEV_OPEN] = &API_dev_open; calls_table[API_DEV_CLOSE] = &API_dev_close; calls_table[API_DEV_READ] = &API_dev_read; calls_table[API_DEV_WRITE] = &API_dev_write; calls_table[API_ENV_GET] = &API_env_get; calls_table[API_ENV_SET] = &API_env_set; calls_table[API_ENV_ENUM] = &API_env_enum; calls_table[API_DISPLAY_GET_INFO] = &API_display_get_info; calls_table[API_DISPLAY_DRAW_BITMAP] = &API_display_draw_bitmap; calls_table[API_DISPLAY_CLEAR] = &API_display_clear; calls_no = API_MAXCALL; debugf("API initialized with %d calls\n", calls_no); dev_stor_init(); /* * Produce the signature so the API consumers can find it */ sig = malloc(sizeof(struct api_signature)); if (sig == NULL) { printf("API: could not allocate memory for the signature!\n"); return; } debugf("API sig @ 0x%08x\n", sig); memcpy(sig->magic, API_SIG_MAGIC, 8); sig->version = API_SIG_VERSION; sig->syscall = &syscall; sig->checksum = 0; sig->checksum = crc32(0, (unsigned char *)sig, sizeof(struct api_signature)); #ifdef CONFIG_OCTEON /* Since the OCTEON bootloader is rather large we need a better way * to hint where the signature is so we pass it as an argument. */ gd->arch.api_sig_addr = sig; #endif debugf("syscall entry: 0x%08x\n", sig->syscall); }
void api_init(void) { struct api_signature *sig = NULL; /* TODO put this into linker set one day... */ calls_table[API_RSVD] = NULL; calls_table[API_GETC] = &API_getc; calls_table[API_PUTC] = &API_putc; calls_table[API_TSTC] = &API_tstc; calls_table[API_PUTS] = &API_puts; calls_table[API_RESET] = &API_reset; calls_table[API_GET_SYS_INFO] = &API_get_sys_info; calls_table[API_UDELAY] = &API_udelay; calls_table[API_GET_TIMER] = &API_get_timer; calls_table[API_DEV_ENUM] = &API_dev_enum; calls_table[API_DEV_OPEN] = &API_dev_open; calls_table[API_DEV_CLOSE] = &API_dev_close; calls_table[API_DEV_READ] = &API_dev_read; calls_table[API_DEV_WRITE] = &API_dev_write; calls_table[API_ENV_GET] = &API_env_get; calls_table[API_ENV_SET] = &API_env_set; calls_table[API_ENV_ENUM] = &API_env_enum; calls_table[API_DISPLAY_GET_INFO] = &API_display_get_info; calls_table[API_DISPLAY_DRAW_BITMAP] = &API_display_draw_bitmap; calls_table[API_DISPLAY_CLEAR] = &API_display_clear; calls_table[API_ADDCMD] = &API_add_command; calls_table[API_RUNCMD] = &API_run_command; calls_table[API_AUTOC] = &API_auto_complete; calls_table[API_DRAM] = (cfp_t)&API_dram_size; calls_no = API_MAXCALL; debugf("API initialized with %d calls\n", calls_no); dev_stor_init(); /* * Produce the signature so the API consumers can find it */ sig = malloc(sizeof(struct api_signature)); if (sig == NULL) { printf("API: could not allocate memory for the signature!\n"); return; } debugf("API sig @ 0x%08x\n", sig); memcpy(sig->magic, API_SIG_MAGIC, 8); sig->version = API_SIG_VERSION; sig->syscall = &syscall; sig->checksum = 0; sig->checksum = crc32(0, (unsigned char *)sig, sizeof(struct api_signature)); debugf("syscall entry: 0x%08x\n", sig->syscall); }