source: trunk/softs/tsar_boot/include/reset_utils.h @ 757

Last change on this file since 757 was 701, checked in by cfuguet, 11 years ago

tsar_boot:

  • Important optimization in the reset_elf_loader function.
  • Implementation of pread function which uses bytes addressing to read disk.
  • pread function alternates between direct tranfer from disk to memory and from disk to a memory cache block based on alignment of byte address, i.e., when file offset is aligned to disk block (512 bytes), pread uses DMA capacity of disk to transfer directly to memory, otherwise it passes before by a memory cache block and then performs a memcpy to transfer data to final destination.
  • the cache block used by pread function, allows to treat succeeding reads on the same block without accessing the disk.
File size: 1.6 KB
RevLine 
[586]1/*
2 * \file    : reset_utils.h
[425]3 * \date    : August 2012
4 * \author  : Cesar Fuguet
5 */
6
7#ifndef BOOT_UTILS_H
8#define BOOT_UTILS_H
9
10#include <elf-types.h>
[586]11#include <reset_tty.h>
[701]12#include <reset_ioc.h>
13#include <defs.h>
[655]14#include <mcc.h>
15#include <io.h>
[425]16
[701]17/********************************************************************
18 * Integer types definition
19 ********************************************************************/
20typedef unsigned int size_t;
21typedef unsigned int addr_t;
22
23/********************************************************************
24 * Other types definition
25 ********************************************************************/
26
27/*
28 * cache line aligned disk block (sector) buffer
29 */
30struct aligned_blk
31{
32    char b[BLOCK_SIZE];
33} __attribute__((aligned(CACHE_LINE_SIZE)));
34
35/********************************************************************
36 * Utility functions definition
37 ********************************************************************/
38
[586]39extern unsigned int proctime();
[425]40
[701]41extern int pread(size_t file_offset, void *buf, size_t nbyte, size_t offset);
[425]42
[701]43extern void* memcpy(void *_dst, const void *_src, size_t n);
44extern void* memset(void *_dst, int c, size_t len);
[425]45
[701]46extern void check_elf_header(Elf32_Ehdr *ehdr);
[586]47extern void reset_print_elf_phdr(Elf32_Phdr * elf_phdr_ptr);
[425]48
[653]49#if USE_IOB
[701]50void reset_mcc_invalidate (const void * buf, size_t size);
[653]51#endif /* USE_IOB */
[425]52
[653]53#if (CACHE_COHERENCE == 0) || USE_IOB
[701]54void reset_buf_invalidate (const void * buf, size_t line_size, size_t size);
[653]55#endif /* (CACHE_COHERENCE == 0) || USE_IOB */
56#endif /* BOOT_UTILS_H */
57
[425]58// vim: tabstop=4 : softtabstop=4 : shiftwidth=4 : expandtab
59
Note: See TracBrowser for help on using the repository browser.